코드를 복사하려고 합니다.여기
어떤 이유로든 내 컴퓨터에서는 작동하지 않습니다. 숫자 값이 아닌 출력은 명령 자체입니다.
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
run 명령이 변수 내용의 일부이기 $x
때문에 귀하의 경우에는 작동합니다 .echo
답변2
Haxiel이 지적했듯이 백틱 문자가 아닌 작은따옴표를 사용할 가능성이 높습니다. 하지만 `
내가 추천하는 역따옴표( )를 사용하는 것보다 낫습니다 $()
. 백틱은 더 이상 사용되지 않으며 $()
POSIX와 호환됩니다.
귀하의 예에서는 다음을 수행할 수 있습니다.
x=$(echo "var=500;var%=7;var" | bc)
echo "$x"
또는 한 줄로:
echo "var=500;var%=7;var" | bc