Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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:三個目以降は二番目の変数に代入されるようです