zsh では、次の 2 つのコマンドの結果が異なります。
a=$(</etc/hosts) && echo $a
echo $(</etc/hosts)
最初はコンテンツを1行ずつ印刷し、2番目はコンテンツ全体を1行に印刷します。
私はこれがサブシェルがメインプロセスに1行ずつ結果を返すからだと推測しますecho
が、これを確認することはできません。
誰かがこの問題を解決するのに役立ちますか?
ベストアンサー1
zshでは引用符のない変数は自動的に分割されず、グローバルに使用されます。、しかし引用符のないコマンド置換は分割されます。の値を使用して単語に変換しますIFS
。
あなたの場合、最初のコマンドはファイルの内容を/etc/hosts
変数に保存し、分割せずにa
変数の値をecho $a
印刷し、全体的に内容を取得します(a
/etc/hosts
変数割り当ての RHS では、分割と glob は実行されません。)。
echo $(</etc/hosts)
引用符なしでコマンド置換を使用すると、結果が単語に分割されるため、スペースで区切られた/etc/hosts
すべての単語の内容を取得できます。