下面的命令列表如何能单独引用呢?
s="cp
mkdir
[[
mv
rm"
quoted_s= ????
这应该是以下的输出echo $quoted_s
:
cp
mkdir
\[\[
mv
rm
一起使用${(q)s}
或${(qq)s}
引用它们:
$ echo ${(qq)s}
'cp
mkdir
[[
mv
rm'
答案1
在这种情况下,您可以使用b
扩展标志。从info zsh flag
或man zshexpn
:
b Quote with backslashes only characters that are special to pat‐
tern matching.
所以给出
~ % print -r -- $s
cp
mkdir
[[
mv
rm
然后
~ % print -r -- ${(b)s}
cp
mkdir
\[\[
mv
rm
更一般地说,您可以按换行符拆分,应用于q
结果,然后重新加入:
~ % print -r -- ${(F)${(qf)s}}
cp
mkdir
\[\[
mv
rm
或者使用 csh 风格的后缀修饰符
~ % print -r -- ${(F)${(f)s}:q}
cp
mkdir
\[\[
mv
rm
甚至(让print
添加回换行符)
% print -rC1 -- ${(qf)s}
cp
mkdir
\[\[
mv
rm
(在 olumn-C1
上打印的1
C
优点是-l
,如果没有参数,则不会打印任何内容,而不是打印一个空行)。
请注意,b
、q
、qq
、qqq
、qqqq
、q-
、q+
标志和:q
修饰符会产生不同类型的引用,请选择最适合您的特定用例的引用。
无论你做什么,都不要忘记--
。忽略它会引入任意命令注入漏洞,这是最糟糕的一种漏洞。