Bashrc

如何為我的 bash 找出正確的字元串語法?

  • May 27, 2014

我收到此別名的錯誤消息:

alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''

這是錯誤消息:

-bash: .bashrc: line 15: syntax error near unexpected token `('
-bash: .bashrc: line 15: `alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'''

我在那裡有很多別名,但我無法理解這條消息!我發現許多網站對字元串的語法有很多不同的建議。

我在 OS X Mavericks (10.9.3) 上。

我的問題是:

如何找出我的 bash 版本,並據此確定我的 bash 文件的正確語法?

bash --version

alias ejectall=$'osascript -e \'tell application "Finder" to eject (every disk whose ejectable is true)'\'

問題在於您的引用——與您擁有的 bash 版本無關(儘管您可以執行bash --versionecho "$BASH_VERSION"找出答案)。那些引用規則沒有改變。

'-報價很簡單。他們只是引用直到下一個'。所以在你的例子中:

alias ejectall='osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)''
              ^             ^ 
           start           end

換句話說,以“tell application”開頭的shell 沒有引用。

你可以這樣做:

alias ejectall='osascript -e '\''tell application "Finder" to eject (every disk whose ejectable is true)'\'

基本上,這結束了帶引號的字元串,放入單引號(帶\'),然後開始一個新的帶引號的字元串。由於沒有空格,相鄰的帶引號的字元串會合併在一起。你可以看到:

$ echo 'I'\''ll work'
I'll work

您的另一個選擇是使用"-quotes,然後您需要使用轉義其他其他雙引號\"並使用轉義美元符號\$

$ echo "That \"is\" \$3.00."
That "is" $3.00.

或者,正如 Hauke Laging 在他的回答中指出的那樣,您可以使用 Bash 的$'-strings。那些在 ’’ 字元串中啟用各種轉義序列,包括\'.

所有這些都在 bash 手冊頁的“引用”部分中有詳細說明。

引用自:https://unix.stackexchange.com/questions/132223