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 found. $x귀하의 경우에는 echo명령이 변수 내용의 일부였기 때문에 실행이 가능했습니다.

답변2

Haxiel이 언급했듯이 백틱 문자 대신 작은따옴표를 사용했을 가능성이 높습니다. 그러나 백틱( `)을 사용하는 것보다 를 사용하는 것이 좋습니다 $(). 백틱은 더 이상 사용되지 않으며 $()POSIX와 호환됩니다.

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

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

또는 하나의 라이너로:

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

관련 정보