Echoはzshのサブシェルで発生します。

Echoはzshのサブシェルで発生します。

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すべての単語の内容を取得できます。

おすすめ記事