Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

readコマンドで標準入力から変数を代入する

readは標準入力から変数を代入するコマンドです。

$ read Hoge <<< 'as'

$ echo ${Hoge}
as

そもそもは標準入力と連動して動くものです。
以下のようなbashスクリプトを組み

#!/bin/bash

## hoge.sh

# single 'read' statement can set multiple variables.
echo -n "Enter the values of variables 'var2' and 'var3' "
echo -n "(separated by a space or tab): "
read var2 var3
echo "var2 = $var2      var3 = $var3"

実行権限付きでやると、スペースやタブで区切ったものがデータとして入ります。*1

$ ./hoge.sh
Enter the values of variables 'var2' and 'var3' (separated by a space or tab): foo bar
var2 = foo      var3 = bar

さらに”a”オプションをつけると...
配列になるんです。

$ read -a Words <<< '12 34 56 78'

呼び出す時は「${変数名[番号]}」

$ echo ${Words[0]}
12
$ echo ${Words[1]}
34
$ echo ${Words[2]}
56
$ echo ${Words[3]}
78
$ echo ${Words[4]}

残念ながら、末尾を指定する「-1」は実装されてません。

$ echo ${Words[-1]}
-bash: Words: bad array subscript

*1:三個目以降は二番目の変数に代入されるようです