LoginSignup
3
3

More than 3 years have passed since last update.

シェルスクリプト:改行あり・なしの値の取得、改行あり・なしのecho

Last updated at Posted at 2019-12-20

この投稿はShell Script Advent Calendar 21日目です

お願い

ええそれ違うんじゃない?もっとこういうやり方あるよ!

という方は、是非是非コメントで教えていただけると嬉しいです。。

はじめに

シェルスクリプト(bash)で、

改行入りの値を取得するコマンドを叩いた後に、

変数には改行ありの値が入っているはずなのに、

echoで表示した時に改行されたりされなかったりして混乱したというお話

そこで今回は、値の取得編値の表示編に分けて、改行に関する備忘録を残します

解決方法

サンプルとして、以下のテキストファイル内の値を取得するコマンドを叩くとします

テキストファイル内の値を取得するコマンドについては今回省略します。。

sample.txt

aaa
bb
ccc

値の取得編

  • sample.txtの値が改行なしで ${FUGA} に代入される
FUGA=$(echo `sample.txt の値を取ってくるコマンド`)
  • sample.txtの値が改行ありで ${HOGE} に代入される
HOGE=$(sample.txt の値を取ってくるコマンド)

値の取得時に改行を無視する OR しないについては、当初わたしが調べた際は期待した回答が得られなかった。。

圧倒的ぐぐり力不足。。

echoコマンドsample.txt の値を取ってくるコマンドを渡したもの」を変数に代入すると、改行が無視された値が入る

echoコマンドを付与せずに、「素?のsample.txt の値を取ってくるコマンド」を変数に代入すると、改行ありの値が入る

ちょっと考えると、それはそうなんだよなあ(困惑)

混乱が解けたのでよかった()

値の表示編

ちょっとややこしい。。

  • 改行があっても無視されるパターン: echo ${変数}
echo ${FUGA}
# -> そもそも改行が無視されて値が代入されているので、改行がない(されない)

echo ${HOGE}
# -> 改行ありで値が代入されているけれど、改行されない

実行結果:

  • FUGA

    aaa bb ccc

  • HOGE

    aaa bb ccc

  • 改行があっても無視されないパターン: echo "${変数}"

echo "${FUGA}"
# -> そもそも改行が無視されて値が代入されているので、改行がない(されない)
echo "${HOGE}"
# -> 改行ありで値が代入されているので、改行される!!

実行結果:

  • FUGA

    aaa bb ccc

  • HOGE

    aaa

    bb

    ccc

echoについては、ググったら先人たちの知恵がたくさん出てきた。。ありがとうございます。。

なぜこうなったのか

おそらく、

値の取得をする時点で、その値に対して何らかの処理(grepとか)をしたくて、echoをつけたりつけなかったり試行錯誤していて、

そのあと値の取得と処理ができるようになって、echoが必要なくなったので消したつもりだったんだけど、

ちゃんと消せたところと、消し忘れたところが混在してしまった(ヒューマンエラー)

がために、

改行されないことについて色々とググって調べて試しているうちに、

値の取得の時点ですでに改行が無視されているのか、値の表示の時点で改行を無視しているのかわからなくなってしまった(混乱)

のだと思われます。。落ち着こうね、休憩しようね

HOGE=$(echo "`なんかどっかからlistを取ってくるコマンド`")

↑こんな感じのコードを書いた痕跡もあった

おわりに(感想)

先人たちが残してくれた記録は尊いし、だいたいあってる。。(2回目)

ぐぐるチカラ(キーワードの選定とか、キーワードの繋げかたとか。。)はもっと磨いておこうと思いました。

3
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3