我試圖編寫一個shell腳本來顯示作爲位置參數傳遞的環境變量的值。bash中值的值
for i in [email protected]
do
printf "$i" | xargs -I {} echo "${}"
done
但是,上面的代碼不起作用。 有人可以指導我通過。
謝謝。
我試圖編寫一個shell腳本來顯示作爲位置參數傳遞的環境變量的值。bash中值的值
for i in [email protected]
do
printf "$i" | xargs -I {} echo "${}"
done
但是,上面的代碼不起作用。 有人可以指導我通過。
謝謝。
您的腳本的問題是xargs
不使用shell來執行命令,因此參數$
不會導致變量擴展。
而是使用間接變量引用,方法是將!
放在變量名稱的前面,如Parameter Expansion文檔中所述。
for i in "[email protected]"
do
printf "%s = %s\n" "$i" "${!i}"
done
結果:
$ ./testvar.sh HOME USER
HOME = /Users/barmar
USER = barmar
xargs
不通過運行一個shell命令,因此位置參數不擴大。
您可以使用bash -c
執行echo
命令和擴大的位置參數:
for i in "[email protected]"; do
echo "$i" | xargs -I {} bash -c 'echo "${}"'
done
的第一個參數'printf'應該是一個格式字符串,比如' 「%S \ n」'。 – Barmar
「$ {}」引起的雙引號導致正在運行的shell嘗試擴展它並失敗。 (我在這裏得到一個「錯誤的替代」錯誤。)除了答案中討論的要點之外。 –