[英]Using spaces in bash scripts
我有一個腳本foo.sh
CMD='export FOO="BAR"'
$CMD
echo $FOO
它按預期工作
>./foo.sh
"BAR"
現在我想將FOO變量更改為BAR BAR
。 所以我得到了腳本
CMD='export FOO="BAR BAR"'
$CMD
echo $FOO
當我運行它時,我期望得到"BAR BAR"
,但是我得到
./foo.sh: line 2: export: `BAR"': not a valid identifier
"BAR
我該如何處理?
您不應僅通過調用變量(如在$CMD
)將其用作命令。 而是使用eval
評估存儲在變量中的命令。 只有這樣做,才能執行所有外殼程序邏輯的真實評估步驟:
eval "$CMD"
(並使用雙引號將命令傳遞給eval
。)
只是不要那樣做。
並閱讀Bash常見問題#50
- 我正在嘗試保存命令,以便以后可以運行而不必每次都重復
如果要將命令放在容器中供以后使用,請使用一個函數。 變量保存數據,函數保存代碼。
pingMe() { ping -q -c1 "$HOSTNAME" } [...] if pingMe; then ..
正確的方法是使用數組:
CMD=(export FOO="BAR BAR")
"${CMD[@]}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.