次のコマンドリストをどのように個別に引用できますか?
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
(列-C1
に印刷することの利点は、パラメータがないと空白行を印刷する代わりに何も印刷されないこと1
C
です。)-l
、、、、、、、フラグ、および修飾子はさまざまな種類の参照を生成b
するため、q
特定のユースケースに最適なものを選択してください。qq
qqq
qqqq
q-
q+
:q
何をしても忘れないでください--
。これを無視すると、最悪の脆弱性であるランダム命令注入の脆弱性が発生します。