더하기 기호가 있는 숫자에서 문자열을 생성하는 bash 스크립트

더하기 기호가 있는 숫자에서 문자열을 생성하는 bash 스크립트

Bash 스크립트에서 나는 숫자로 주어진 인수로부터 표현식을 생성하고 +그 앞에 더하기 기호를 추가하는 겉으로는 간단해 보이는 문제를 우연히 발견했습니다.

YEA= expr $2 \* 365
echo ${YEA}
pl="+"
echo "${pl}${YEA}"

이것을 문자열로 연결하고 싶습니다. 예를 들어 다음과 같이 $2=10출력되어야 합니다.

3650
+3650

명령줄에서는 잘 작동하지만 스크립트에서는 출력만 수행됩니다.

3650
+

나는 또한 printfand를 사용해 보았고 awk비슷하게 작동했습니다. 그래서 내 문제는 bash에 있다고 생각합니다.

왜 이런 일이 발생하는지 설명할 수 있나요?

답변1

할당 연산자 뒤에는 공백이 없어야 합니다.

YEA= expr $2 \* 365
#   ~

expr공백을 사용하면 환경 변수가 $YEA명시적으로 빈 문자열로 설정된 경우 작동합니다 . expr환경 변수에는 관심이 없으며 결과 계산 및 출력에만 관심이 있습니다. 쉘 컨텍스트의 변수는 변경되지 않습니다.

명령의 출력을 변수에 할당하려면 명령 대체를 사용하십시오.

YEA=$(expr $2 \* 365)

또는 대신 산술 평가를 사용하십시오 expr.

(( YEA = $2 * 365 ))

관련 정보