
我正在嘗試複製程式碼這裡
不管出於什麼原因,它在我的電腦上不起作用。輸出,而不是數值,才是命令本身。
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
您使用的是單引號,而不是反引號字元。單引號指示 shell 保留文字值而不對其內容套用任何類型的處理。結果,命令按原樣分配給變數。這是相應的-x
輸出:
$ x='echo "var=500;var%=7;var"|bc'
+ x='echo "var=500;var%=7;var"|bc'
最後,要列印變數內容,您應該使用echo
or 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