我收到此别名的错误消息:
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 文件的正确语法?
答案1
bash --version
alias ejectall=$'osascript -e \'tell application "Finder" to eject (every disk whose ejectable is true)'\'
答案2
问题在于你的引用——与你拥有哪个版本的 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 手册页的“引用”部分中有详细介绍。