Bash 쉘:BC 계산 결과를 변수에 할당하고 인쇄하는 방법은 무엇입니까?

Bash 쉘:BC 계산 결과를 변수에 할당하고 인쇄하는 방법은 무엇입니까?

코드를 복사하려고 합니다.여기여기에 이미지 설명을 입력하세요.

어떤 이유로든 내 컴퓨터에서는 작동하지 않습니다. 숫자 값이 아닌 출력은 명령 자체입니다.

apple$ x='echo "var=500;var%=7;var"|bc'
apple$ $x
"var=500;var%=7;var"|bc

이유를 알고 싶습니다. 내가 뭘 잘못했나요?

답변1

소스는 백틱( `)을 사용하여 명령 대체를 나타냅니다. 백틱 안에 지정된 명령을 실행하고 결과를 해당 위치에 배치합니다. 이 경우에는 단순한 변수 할당이므로 명령의 결과가 변수에 할당됩니다.

-x이는 bash 옵션을 통해 쉽게 확인할 수 있습니다.

$ x=`echo "var=500;var%=7;var"|bc`
++ echo 'var=500;var%=7;var'
++ bc
+ x=3

백틱 문자가 아닌 작은따옴표를 사용하고 있습니다. 작은따옴표는 내용에 어떤 종류의 처리도 적용하지 않고 리터럴 값을 유지하도록 셸에 지시합니다. 결과적으로 명령은 그대로 변수에 할당됩니다. 해당 -x출력은 다음과 같습니다.

$ x='echo "var=500;var%=7;var"|bc'
+ x='echo "var=500;var%=7;var"|bc'

echo마지막으로 변수 내용을 인쇄하려면 또는 를 사용해야 합니다 printf. "x" 값이 3인 경우 실행하면 오류 메시지가 $x표시됩니다 . -bash: 3: command not foundrun 명령이 변수 내용의 일부이기 $x때문에 귀하의 경우에는 작동합니다 .echo

답변2

Haxiel이 지적했듯이 백틱 문자가 아닌 작은따옴표를 사용할 가능성이 높습니다. 하지만 `내가 추천하는 역따옴표( )를 사용하는 것보다 낫습니다 $(). 백틱은 더 이상 사용되지 않으며 $()POSIX와 호환됩니다.

귀하의 예에서는 다음을 수행할 수 있습니다.

x=$(echo "var=500;var%=7;var" | bc)
echo "$x"

또는 한 줄로:

echo "var=500;var%=7;var" | bc

관련 정보