我有一个用于初始化dzen2的sh脚本,我希望在那里使用源代码专业字体。这是密码..。
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'"'"
还是不管用..。这个剧本怎么了?
发布于 2022-11-09 10:34:17
如果您想要跟踪几个单独的字符串(参数),然后将它们作为单独的字符串使用,请不要将它们存储在同一个字符串中。使用数组代替:
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'
变成单独的参数'Source
、Code
和Pro-10'
(注意,单引号也包含在字符串中)。
相关信息:
在sh
脚本中,您可以使用位置参数列表:
set -- -p -dock -fn 'Source Code Pro-10'
generated_output | dzen2 "$@"
这也适用于bash
外壳程序。
https://unix.stackexchange.com/questions/724220
复制相似问题