ユーザー入力を数回評価する必要があるスクリプトがあります。私が取り組んでいる解決策は、評価ビットを関数に入れ、入力を評価する必要があるたびに単に関数を呼び出すことです。$1
問題は、変数 (関数の最初の変数パラメーターを参照する)を更新しようとすると、 「$VARIABLE コマンドが見つかりません」というエラー メッセージが表示されることです。
コードは次のとおりです。
function input_handler() {
if is_integer $1; then
selid="$1 -1"
if [[ "$1" -le "0" ]]; then
echo "Please use a simple positive number!"
else
if [[ "$1" -le "${#array[*]}" ]]; then
eval $1="${array[selid]}"
echo "Ok, moving on..."
else
echo "That number seems too large, try again?"
fi
fi
else
if [ -e $2/$1 ]; then
echo "Ok, moving on..."
else
echo "That item is not on the list, try again!"
fi
fi
}
そして、このコマンド:
input_handler $doctype $docpath
次の出力が得られます。
5
./test: line 38: 5=sun: command not found
では、次に進みます...
これでほぼ正しいのですが、後は 5=sun ではなく doctype=sun です。つまり$1
、値ではなく変数名が必要です。eval $1="${array[selid]}"
行を変更して、eval doctype="${array[selid]}"
この特定のインスタンスを修正します。しかし、この関数を異なる名前の異なる変数で実行する必要があるため、これは私の問題を解決しません。