我有一个用于初始化 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'"'"
仍然不起作用...
这个脚本有什么问题?
如果您想跟踪几个单独的字符串(参数)并稍后将它们用作单独的字符串,请不要将它们存储在同一个字符串中。改用数组:
带引号的展开
"${param[@]}"
将展开为数组中的字符串列表param
。请注意,这意味着这Source Code Pro-10
将是一个参数,这就是您想要的。如果您忘记了扩展名周围的引号,shell 将继续将每个字符串拆分为$IFS
字符(默认情况下为空格、制表符和换行符),然后将文件名通配符应用于每个生成的单词。您的代码依赖于 shell 将字符串拆分
-p -dock -fn 'Source Code Pro-10'
为命令的参数。由于默认情况下 shell 在空格、制表符和换行符上拆分,这将导致子字符串'Source Code Pro-10'
变成单独的参数'Source
,Code
, 和Pro-10'
(请注意,单引号也包含在字符串中)。有关的:
在
sh
脚本中,您将改为使用位置参数列表:这也可以在
bash
shell 中工作。