Zsh
zsh:如何分別轉義每個單詞?
以下命令列表如何單獨引用?
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'
在這種情況下,您可以使用
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 -rC1 -- ${(qf)s} cp mkdir \[\[ mv rm
(
-C1
在 olumn 上列印1
C
的優勢-l
在於,如果沒有參數,則不會列印任何內容,而不是一個空行)。請注意,
b
,q
,qqq
,qqqq
,q-
,q+
標誌和:q
修飾符會產生不同類型的引用,請選擇最適合您的特定案例的引用。無論您做什麼,都不要忘記
--
. 省略它會引入任意命令注入漏洞,這是最糟糕的漏洞。