Bash 스크립트에서 나는 숫자로 주어진 인수로부터 표현식을 생성하고 +
그 앞에 더하기 기호를 추가하는 겉으로는 간단해 보이는 문제를 우연히 발견했습니다.
YEA= expr $2 \* 365
echo ${YEA}
pl="+"
echo "${pl}${YEA}"
이것을 문자열로 연결하고 싶습니다. 예를 들어 다음과 같이 $2=10
출력되어야 합니다.
3650
+3650
명령줄에서는 잘 작동하지만 스크립트에서는 출력만 수행됩니다.
3650
+
나는 또한 printf
and를 사용해 보았고 awk
비슷하게 작동했습니다. 그래서 내 문제는 bash에 있다고 생각합니다.
왜 이런 일이 발생하는지 설명할 수 있나요?
답변1
할당 연산자 뒤에는 공백이 없어야 합니다.
YEA= expr $2 \* 365
# ~
expr
공백을 사용하면 환경 변수가 $YEA
명시적으로 빈 문자열로 설정된 경우 작동합니다 . expr
환경 변수에는 관심이 없으며 결과 계산 및 출력에만 관심이 있습니다. 쉘 컨텍스트의 변수는 변경되지 않습니다.
명령의 출력을 변수에 할당하려면 명령 대체를 사용하십시오.
YEA=$(expr $2 \* 365)
또는 대신 산술 평가를 사용하십시오 expr
.
(( YEA = $2 * 365 ))