答え1
に渡された引数が外部入力から来ていないことを確認してくださいeval
。それ以外の場合は事前に削除しました。
次のようにしないでください。
n=0
....
n=$((n + 1))
eval "var$n=$1"
$n
下にあなたのコントロール、内容は$1
そうではありません。たとえば、その場合、$1
evalは解釈するコードを受け取り、再起動します。foo;reboot
var3=foo;reboot
使用:
eval "var$n=\$1"
そうすれば逆にeval
なりますvar3=$1
。良いことです。
eval "$1=\$2"
また、間違っている可能性があります。保証する必要があるのは、コンテンツが$1
許容可能な値のセット(衛生的に処理されている)からのみ出てくることです。
unset -v var1 foo bar
case $1 in
(var1 | foo | bar) eval "$1=\$2";;
(*) echo >&2 unexpected variable name; exit 1;;
esac
これは任意のコードを評価する唯一のコマンドではeval
ありません。sh
perl
awk
sed
read
export
typeset
printf
test
[