
코드를 복제하려고합니다.여기
어떤 이유로든 내 컴퓨터에서는 작동하지 않습니다. 숫자 값이 아닌 출력은 명령 자체입니다.
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