web-dev-qa-db-ja.com

zshのサブシェルからのエコー結果

Zshでは、次の2つのコマンドの結果が異なります。

a=$(</etc/hosts) && echo $a
echo $(</etc/hosts)

1つ目はコンテンツを1行ずつ印刷し、2つ目はコンテンツ全体を1行で印刷します。

サブシェルが結果を1行ずつメインのechoプロセスに返すためだと思いますが、確認できません。

誰かが私がそれをクリアするのを手伝ってくれる?

5
carl

Zshでは、 引用符で囲まれていない変数は自動的に分割されず、glob ですが、 引用符で囲まれていないコマンド置換は分割されますIFSの値を使用して単語に変換されます。

あなたの場合、最初のコマンドはファイル_/etc/hosts_の内容を変数aに保存し、_echo $a_は分割とグロブなしでa変数の値を出力します。 _/etc/hosts_( 変数割り当てのRHSでは分割とグロブは実行されません )。

echo $(</etc/hosts)は引用符で囲まれていないコマンド置換を使用し、結果は単語に分割されるため、スペースで区切られたすべての単語として_/etc/hosts_のコンテンツを取得します。

4
cuonglm