見積もりがオフになっています。
"for dir in *; do
test -d "\$dir" && ( find "\$dir" -name '*test' | grep -q . || echo "\$dir" );
done"
文字列を二重引用符で区切ることにしまし"
たが、それらは文字列に含まれています。
他の引用符をエスケープする:
"for dir in *; do
test -d \"\$dir\" && ( find \"\$dir\" -name '*test' | grep -q . || echo \"\$dir\" );
done"
(エラーが発生しやすい、醜い)
…または別の区切り文字を使用する:Perlは幅広い可能性を提供します。これらの引用構文は、内部の変数を補間します。ここで、任意の文字を区切り文字として使用できます。非補間構文は次のとおりです。以前と同じ区切り文字の柔軟性を備えています。"…"
qq{…}
[^\s\w]
'…'
q{…}
qq{for dir in *; do
test -d "\$dir" && ( find "\$dir" -name '*test' | grep -q . || echo "\$dir" );
done}
q
and構文はqq
、オカレンスのバランスが取れている場合、文字列内に区切り文字を含めることができますq( a ( b ) c )
。
3番目の引用メカニズムはヒアドキュメントです:
system( <<END_OF_BASH_SCRIPT );
for dir in *; do
test -d "\$dir" && ( find "\$dir" -name '*test' | grep -q . || echo "\$dir" );
done
END_OF_BASH_SCRIPT
これは、区切り文字を気にせずに長いフラグメントを含める場合に便利です。文字列は、それ自体の行に表示される必要がある事前定義されたトークンで終了します。区切り文字宣言が一重引用符(<<'END_OF_SCRIPT'
)で囲まれている場合、変数は補間されません。
system( <<'END_OF_BASH_SCRIPT' );
for dir in *; do
test -d "$dir" && ( find "$dir" -name '*test' | grep -q . || echo "$dir" );
done
END_OF_BASH_SCRIPT
q{}
および構文に関する注意qq{}
:これは、難読化以外では使用できない機能ですが\w
、区切り文字として文字を使用することは可能です。引用符演算子q
またはqq
と区切り文字の間にスペースを含める必要があります。これは機能します:q xabcx
そしてはに等しい'abc'
。