0

入力として、数値を含む 11 行の exp_multiple_512_0 という名前のファイルがあります。私はzshを使用しています。

私が行った場合:

echo $(cut -f1 exp_multiple_512_0)

私は持っている:

0 100 200 300 400 500 600 700 800 900 1000

ただし、行を次のように変更すると:

v=$(cut -f1 exp_multiple_512_0) 
echo $v

私は持っている:

0
100
200
300
400
500
600
700
800
900
1000

しかし、bash を使用すると、次のようになります。0 100 200 300 400 500 600 700 800 900 1000

私の質問は次のとおりです。

  • 正しい動作は何ですか?リターンを維持するかどうか?
  • 中間変数を使用すると改行を保持できるのはなぜですか?
  • その上でzshをよりbashのように動作するように構成できますか?
4

3 に答える 3

1

エコーで引用符を使用します。

echo "$(cut -f1 exp_multiple_512_0)"

または単に:

cut -f1 exp_multiple_512_0

次に、2 番目のコマンドで改行を取得します。

shell を引用符なしで囲むと、改行用のスペースが出力されます。

于 2013-10-16T13:31:27.687 に答える
0

最良の答えは、コメントで言ったchepnetからのものでした:

デフォルトでは、zsh はパラメーター展開で単語分割を実行しません。つまり、埋め込まれた改行は、単語を区切る空白としてではなく、文字どおりに扱われます。setopt SH_WORD_SPLIT は、zsh を bash のように動作させます。問題は、$(cut ...) ではなく、echo $v と echo "$v" にあります。

于 2013-10-30T22:04:18.930 に答える
-1

@chepner が前述したように、zsh は bash と同じように動作しません。

これは、zsh の動作を変更せずに、ソリューションを zsh と bash の両方で機能させる試みです。試してみてください。次のように変更してくださいecho $v

echo "$v" | tr '\n' ' '
于 2013-10-16T13:29:18.633 に答える