5

ユーザー入力を数回評価する必要があるスクリプトがあります。私が取り組んでいる解決策は、評価ビットを関数に入れ、入力を評価する必要があるたびに単に関数を呼び出すことです。$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]}"この特定のインスタンスを修正します。しかし、この関数を異なる名前の異なる変数で実行する必要があるため、これは私の問題を解決しません。

4

4 に答える 4

0

変数名を保護すると、Bash は $1=value を実行しようとする代わりに、評価して $1 に代入します。

eval "$1"=${array[selid]}
于 2013-04-21T14:25:37.737 に答える
-1

定位置パラメーターは読み取り専用です。だからあなたがしたいことは不可能です。次のようなことをする必要があります

foo=$1

そして、$foo代わりに$1

于 2013-04-21T13:05:07.443 に答える