Linux シェル スクリプト: 予期しない変数の動作

Linux シェル スクリプト: 予期しない変数の動作

2 行を含む変数があり$myvar、そのうちの最初の行を新しい変数に格納したいと考えています。

試してみると:

$ myvar1 = $(echo $myvar | head -n 1) 

echo が期待どおりに改行を出力しないため、機能しません。

明らかに私はこれを行うことができます:

$ myvar1 = $(echo $myvar | cut -d " " -f 1)

echo の出力には最初の行に 1 つの単語、2 番目の行に 1 つの単語が含まれるため、機能します。

質問が2つあります。

  1. echo が改行ではなくスペースを出力するのはなぜですか?
  2. 簡単に、あるいはより正確に作成することは可能でしょうか (私はシェル スクリプトの専門家ではないので、何か見落としているかもしれません)

答え1

空白を適切に保持するには、引数をecho引用符で囲みます。

echo "$myvar"

それ以外の場合、値の空白で区切られた要素は への個別の引数として扱われますecho

$ ls -1
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites

$ myvar="$( ls -1 )"

$ echo $myvar
Desktop Documents Downloads Movies Music Pictures Sites

$ echo "$myvar"
Desktop
Documents
Downloads
Movies
Music
Pictures
Sites

何かの最初の行を取得するには、head -n1完璧に機能します。それが実際に必要なものかどうかは、要件と可能な値によって異なります。

関連情報