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'"'"

仍然不起作用...
这个脚本有什么问题?

答案1

如果您想跟踪多个单独的字符串(参数)并稍后将它们用作单独的字符串,请不要将它们存储在同一个字符串中。使用数组代替:

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'变成单独的参数'SourceCodePro-10'(请注意,单引号也包含在字符串中)。

有关的:


sh脚本中,您可以使用位置参数列表:

set -- -p -dock -fn 'Source Code Pro-10'
generated_output | dzen2 "$@"

这在 shell 中也可以工作bash

相关内容