Home Search
拙者、勉強中でござる。

readコマンドのオプション色々【シェルスクリプト】

  • 最終更新:
  • 公開日:

 筆者はあまり使っていなかったのですが、readには色々なオプションがあり、どういう使い方ができそうかを検討してみました。
 今後使う可能性もあるので、ここでメモをしておきます。
 「-a」で配列、「-d」で複数行、「-n」で文字数ずつ格納など。

 下は補足事項です。

  #下記はコマンドラインでの標準入力の代わりです。
  < <(echo '入力内容')

 筆者の更新時の環境は、Linux Debian9です。
 コード行末のバックスラッシュ(又は円マーク)は行を連結させて一行として取り扱うためのものです。見やすいように改行して書くためです。
 readの基本的な使い方は別のページで紹介しています。

readで配列変数に格納する【-a】

 オプション「-a」をつけると、配列変数に格納することになります。
 通常の場合とオプション「-a」をつけた場合とで比較すると分かりやすいです。
 通常だと複数の変数に格納することになります。

  #一つずつ格納
  read AA BB CC \
  < <(echo 'にわとり ひよこ たまご')
  echo "${AA}--${BB}--${CC}"
  
  #「-a」をつけた場合
  read -a ARR \
  < <(echo 'にわとり ひよこ たまご')
  echo "${ARR[0]}--${ARR[1]}--${ARR[2]}"
  
  <pre><samp>
  #出力結果は同じ
  にわとり--ひよこ--たまご

デリミタを変更して複数行を入力【-d】

 オプション「-d」を付けることでデリミタ(区切り文字)を変更することができます。
 この機能の使いどころとしては、例えば、コマンドラインの標準入力から複数行を変数に格納することができます。

  #デリミタを「,」にした場合
  read -d , WORDS \
  < <(echo 'いろはにほへと
  ちりぬるを,')
  echo "${WORDS}"

 コマンドライン上で入力する際には、デリミタを入れた時点で入力終了となります。

指定した文字数ごとに格納【-n】

 readに「-n 数字」をオプションとして付けると、指定した文字数になると入力を終了します。文字数を限定したい場合に使えると思います。
 これを応用する例として、while readと組み合わせて使うと、与えた文字列を文字数分ごとに変数に格納することができます。

  #5文字ずつを格納
  TEXT=''
  STR='あいうえおかきくけこさしすせそ'
  
  while read -n 5 LINE
  do
  TEXT="${TEXT}
  ${LINE}"
  done < <(echo ${STR})
  
  echo "${TEXT}" | sed /^$/d

 上では、5文字ずつLINEに格納してTEXTに一行ごとに追加しています。
 while readの使い方に関して、ここでは外部で定義した変数に変更を加えているので、パイプを使えない点には注意が必要です。
 「while read」については、繰り返し処理のページを参照。
 最終行のsedは冒頭の空白行を削除しているだけです。

  #出力結果
  あいうえお
  かきくけこ
  さしすせそ

 今後、どこかで使えたら良いな〜と思います。

References

 マニュアルはコマンドラインで「man read」「read --help」。

TOPへ移動