如何找到适合我的 bash 的字符串语法?

如何找到适合我的 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 文件的正确语法?

答案1

bash --version

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

答案2

问题在于你的引用——与你拥有哪个版本的 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 手册页的“引用”部分中有详细介绍。

相关内容