【シェル】bashで改行区切りの複数行を標準入力する方法
はじめに
bashでスクリプトを書く際に、改行区切りの複数行をキーボードから入力し、配列として扱う方法を調べたのでメモ。
やりたい事
2021-01-01 10:00:00 2021-01-02 10:00:00 2021-01-03 10:00:00
のように、スペースを含む日時を複数行入力した際に、改行区切りで繰り返し処理を実行したい。
やり方
#!/bin/bash IFS=$'\n' input=$(</dev/stdin) for v in ${input[@]} do echo $v done
解説
IFSとは
IFS(Internal Field Separator)は文字の区切りを設定するための環境変数。
bashではデフォルトで「スペース」「タブ」「改行」が設定されている。
今回の場合は入力文字列にスペースが含まれているため、スペースで区切られてしまうのを防ぐためにIFS=$'\n'を指定することで改行区切りに設定している。
/dev/stdinとは
/dev/stdinは標準入力(通常ではキーボード)を表しており、input=$(</dev/stdin)とする事でキーボードから入力された値を変数inputに代入する。