echoの出力が異なるのはなぜですか?

echoの出力が異なるのはなぜですか?

Ubuntu 20.04でBash 5.0.17を使用しています。

フォローアップです。この問題。質問する前に、IFSそれがどのように機能するかを理解したと思いましたが、今は完全に混乱して一連の質問があります。

  1. 静的文字列とはどういう意味ですか?
  2. セグメンテーションと拡張の違いは何ですか?
  3. このサイトのどこかで変数(*)を引用することをお勧めすることを読んでいますが、時には別の結果が得られます。たとえば、次のようになります。
IFS=":"; for i in 1:2:3; do echo $i; done # output: 1 2 3
IFS=":"; for i in 1:2:3; do echo "$i"; done # output: 1:2:3

# Why do the quotes make a difference between the two commands?

これらの質問が愚かだと思われる場合は無視してください。この混乱を解決することに興味がある人がいる場合は、その人の助けに本当に感謝します。

ありがとう

編集する:以下のリンクを追加しました


(*) : 私は次の2つの答えに言及しています。

ベストアンサー1

あなたのfor-loopはあなたが思うように機能しません。

IFS=":"; for i in 1:2:3; do ...

$i文字通り、1:2:3ループは一度だけ実行されます。

IFS変数拡張を使用するか、コマンドの特殊変数を使用して単語を分割しますread

これはあなたの質問に対する答えでもあります。

を実行すると、IFS=:; i=1:2:3; echo $i;拡張(および単語分割)は最後のコマンドでのみ発生し、「単語」(1、2、3)は別々にエコーされます - > 1 2 3。 (@ikkachuがすでに彼の答えで言ったように、これがうまくいくecho方法です)。
引用符を追加すると、$i単語の区切りが防止され、echo変数が文字通り出力されます(1:2:3)。


forこの知識を使用して、変数拡張を介してループを変更することもできます。

IFS=:; var=1:2:3; for i in $var; do echo $i; done

以下を出力します。

1
2
3

おすすめ記事