二重引用符コマンドの置き換えは良い習慣です。プロセス置換(<()
and)は同じですか>()
?
二重引用符はコマンド置換を許可しますが、プロセス置換は許可しないようです。
$ echo <(printf "%s" hello)
/dev/fd/63
$ echo "<(printf "%s" hello)"
<(printf %s hello)
プロセス置換の結果にスペースが含まれている場合、またはこれが発生しない場合はどうなりますか?
ありがとうございます。
ベストアンサー1
簡単にテストしたように、参照プロシージャの置き換えはこれを抑制します。
$ echo <(echo 123)
/dev/fd/63
$ cat <(echo 123)
123
$ echo "<(echo 123)"
<(echo 123)
$ cat "<(echo 123)"
cat: '<(echo 123)': No such file or directory
私が質問する前にこれを試していないことは私にとっては奇妙ですが、今はそれがうまくいかないことを少なくとも簡単に確認できます。
echo "("
これは、同じトークンで別のシェル演算子を参照するときに発生するものと変わりません。これは構文エラーではなく、echo "> /dev/sda"
問題を引き起こしません。
これファイルに書き込む動作は次のとおりです。
ファイル名は拡張の結果として現在のコマンドに引数として渡されます。
単一の引数でスペースの有無は重要ではなく、トークン化は関係なく実行されません。一部のプラットフォームでは、生成されたパスにスペースが表示される場合がありますが、これは効果がありません。