我有一个用于初始化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
复制相似问题