「123」という形式のスクリプト引数に基づいて、bash の配列から要素を動的に削除しようとしています。引数の各 1 桁の数字は、削除する必要がある配列のインデックスであると見なされます。
#!/bin/bash
# Doesn't delete an element.
ARRAY=(a b c)
while getopts ":a:" opt; do # run e.g. 'thisscript.h -a 0'
case $opt in
a)
echo -n $OPTARG |\
while read -n 1 c; do
unset ARRAY[$c]
done
;;
esac
done
echo ${ARRAY[@]}
# Deletes an element successfully.
ARRAY=(a b c)
unset ARRAY[0]
echo ${ARRAY[@]}
# Deletes an element successfully.
ARRAY=(a b c)
n=0
unset ARRAY[$n]
echo ${ARRAY[@]}
これをたとえば tmp.sh ファイルに書き込み、chmod +x tmp.sh を実行可能にしてから、'tmp.sh -a 0' を実行します。
最初の配列要素削除メソッドが機能しないのはなぜですか? また、'read -n 1' コンテキスト内で機能させるにはどうすればよいですか?