Linux シェル,evalを使用して、動的配列に格納する

スポンサーリンク

鍛錬 151

Linux シェルスクリプト,evalを使用して、動的配列に格納する

Ubuntu の「/bin/sh」は「bash」ではなく「dash」であるため、「bash」の配列機能を使用することができません。

「#!/bin/sh」を「#!/bin/bash」に書き換えればいいのですが、これすらも禁止されている場合は、eval を使用して配列の機能を実現できます。

本記事では、eval を使用して動的配列に格納する方法について記述しています。
 
シェルスクリプト

以下は、シェル実行時の引数を取得して、動的配列に格納するシェルスクリプト get_arg.sh です。

(以下のシェルスクリプトで使用している IFS については、別の記事にて紹介しています。)

鍛錬 5 Linux シェルスクリプト,IFSを用いた文字列操作 Linux のシェルスクリプトで、IFS を用いて文字列操作を行う...
#!/bin/sh

ALL_ARG=$@    # 全ての引数を格納
ARG_COUNT=$#  # 引数の合計数を格納

tmp=$ALL_ARG

# デリミタをスペースに設定して引数を分解
IFS_backup=$IFS
IFS=$' '
set -- $tmp
IFS=$IFS_backup

# 引数の合計数に応じて,引数を配列に格納
i=0
num=1
while [ $i -lt $ARG_COUNT ]
do
	arg=$(eval echo '$'$num)
	eval "array_$i=\"$arg\""
	num=$(($num + 1))
	i=$(($i + 1))
done

# 格納した引数リストを表示
i=0
while [ $i -lt $ARG_COUNT ]
do
	arg=$(eval echo '$array_'$i)
	array_name=$(eval echo 'array_'$i)
	echo "$array_name = $arg"
	i=$(($i + 1))
done

 
実行結果

以下は、上記のシェルスクリプト get_arg.sh の実行時に、引数として次に示す 3 つを与えて実行しています。

順番 引数
1 apple
2 orange
3 grape
***@ubuntu:~/***/test/shell$ 
***@ubuntu:~/***/test/shell$ ./get_arg.sh apple orange grape
array_0 = apple
array_1 = orange
array_2 = grape
スポンサーリンク

シェアする

フォローする