簡體   English   中英

在bash腳本中使用空格

[英]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

  1. 我正在嘗試保存命令,以便以后可以運行而不必每次都重復

如果要將命令放在容器中供以后使用,請使用一個函數。 變量保存數據,函數保存代碼。

 pingMe() { ping -q -c1 "$HOSTNAME" } [...] if pingMe; then .. 

正確的方法是使用數組:

CMD=(export FOO="BAR BAR")
"${CMD[@]}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM