Bashrc
如何為我的 bash 找出正確的字元串語法?
我收到此別名的錯誤消息:
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 --version
或echo "$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 手冊頁的“引用”部分中有詳細說明。