Bash
Bash中的單引號問題
我有一個用於初始化 dzen2 的 sh 腳本,我想使用 Source Code Pro 字型在那裡使用。這是程式碼…
param="-p -dock -fn 'Source Code Pro-10'" # the generated_output function is not important generated_output | dzen2 $param
問題是,腳本不起作用!dzen2沒有啟動…經過一番搜尋,我發現問題可能是因為我不太了解的單引號
'
或雙引號的一些問題……"
我試過用這個:
param=$'-p -dock -fn \'Source Code Pro-10\'' # or something like this param='-p -dock -fn '"'"'Source Code Pro-10'"'"
仍然不起作用…
這個腳本有什麼問題?
如果您想跟踪幾個單獨的字元串(參數)並稍後將它們用作單獨的字元串,請不要將它們儲存在同一個字元串中。改用數組:
param=(-p -dock -fn 'Source Code Pro-10') generated_output | dzen2 "${param[@]}"
帶引號的展開
"${param[@]}"
將展開為數組中的字元串列表param
。請注意,這意味著這Source Code Pro-10
將是一個參數,這就是您想要的。如果您忘記了副檔名周圍的引號,shell 將繼續將每個字元串拆分為$IFS
字元(預設情況下為空格、製表符和換行符),然後將文件名萬用字元應用於每個生成的單詞。您的程式碼依賴於 shell 將字元串拆分
-p -dock -fn 'Source Code Pro-10'
為命令的參數。由於預設情況下 shell 在空格、製表符和換行符上拆分,這將導致子字元串'Source Code Pro-10'
變成單獨的參數'Source
,Code
, 和Pro-10'
(請注意,單引號也包含在字元串中)。有關的:
在
sh
腳本中,您將改為使用位置參數列表:set -- -p -dock -fn 'Source Code Pro-10' generated_output | dzen2 "$@"
這也可以在
bash
shell 中工作。