LoginSignup
14
11

More than 5 years have passed since last update.

複数行のechoを、きれいにインデントして書く方法の試案

Last updated at Posted at 2015-02-22

動機

$ echomultiline
hoge
fuga
  • こんな関数を書きたいとする。
    • 主にシェルスクリプトのhelpを表示する関数。
  • 普通にスペースでインデントすると、出力にスペースが入ってしまう。
echomultiline () {
  echo "hoge
  fuga"
}
$ echomultiline
hoge
  fuga
  • ヒアドキュメントで書くと、(タブ文字でしか)インデントできない。

echomultiline () {
  cat << _EOB_
hoge
fuga
_EOB_
}

# タブ文字でインデント
echomultiline () {
    cat <<-_EOB_
    hoge
    fuga
    _EOB_
}
  • 普段通りスペースで、きれいにインデントしたい。
  • 結論先出しすると、決定版と言えるものはない。

複数回echo

echomultiline () {
  echo "hoge"
  echo "fuga"
}
  • 単純明快。
  • echo <text> 1>&2とかしたいとき大変。

{}()で括る

echomultiline () {
  {
    echo hoge
    echo fuga
  } 1>&2
}

一行で記述してtrコマンドで改行に置換

echomultiline () {
  echo "hoge@fuga" | tr '@' '\n'
}
  • 全体の可読性は上がるが、この部分は見づらい。

sedコマンドで余分なものを削除

echomultiline () {
  echo "hoge
  fuga" | sed 's/^ *//g'
}
echomultiline () {
  echo "
    hoge
    fuga
  " | sed -e 's/^ *//g' -e '1d' -e '$d'
}
  • やりすぎ感。

別解:whatコマンドを使用

  • 実行可能ファイル形式シェルスクリプトの説明文限定。
sample.sh
#!/bin/bash
# @(#)hoge
# @(#)fuga
what $0
$ what sample.sh
sample.sh
    hoge
    fuga

$ ./sample.sh
sample.sh
    hoge
    fuga
  • わりときれいに書ける。
14
11
0

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
14
11