
2 行を含む変数があり$myvar
、そのうちの最初の行を新しい変数に格納したいと考えています。
試してみると:
$ myvar1 = $(echo $myvar | head -n 1)
echo が期待どおりに改行を出力しないため、機能しません。
明らかに私はこれを行うことができます:
$ myvar1 = $(echo $myvar | cut -d " " -f 1)
echo の出力には最初の行に 1 つの単語、2 番目の行に 1 つの単語が含まれるため、機能します。
質問が2つあります。
- echo が改行ではなくスペースを出力するのはなぜですか?
- 簡単に、あるいはより正確に作成することは可能でしょうか (私はシェル スクリプトの専門家ではないので、何か見落としているかもしれません)
答え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
完璧に機能します。それが実際に必要なものかどうかは、要件と可能な値によって異なります。