Bash
Bash 中包含引號和空格的變數
我在 Bash 腳本中嘗試以下操作:
MV_PARAMS='"foo 1" "foo 2"' mv $MV_PARAMS
我想要實際執行的是:
mv "foo 1" "foo 2"
但這似乎不起作用。試試這個:
mv "$MV_PARAMS"
也不行。
你應該做的是使用一個數組:
mv_params=("foo 1" "foo 2") mv "${mv_params[@]}"
數組擴展將正確處理帶有空格或特殊字元的數組元素。
在 shell 腳本中處理文件名中的空格通常很複雜。在這種情況下,給定:
MV_PARAMS='"foo 1" "foo 2"'
當你寫:
mv $MV_PARAMS
你最終會
mv
像這樣執行 shell:execve("/usr/bin/mv", ["mv", "\"foo", "1\"", "\"foo", "2\""])
也就是說,有四個參數:
- “富
- 1"
- “富
- 2"
您可以使用該
eval
命令讓 shell 解析生成的命令行:eval "mv $MV_PARAMS"
哪個會做你想做的事。使用
eval
有時會很棘手,在eval
似乎是解決方案的情況下,我會經常嘗試重寫一些東西以避免需要它。