単一の文字列だけでなく、実行中のコマンドの引数を含む複数の変数がある場合、次の場合に失敗するため、evalを直接使用しないでください。
function echo_arguments() {
echo "Argument 1: $1"
echo "Argument 2: $2"
echo "Argument 3: $3"
echo "Argument 4: $4"
}
# Note we are passing 3 arguments to `echo_arguments`, not 4
eval echo_arguments arg1 arg2 "Some arg"
結果:
Argument 1: arg1
Argument 2: arg2
Argument 3: Some
Argument 4: arg
「Some arg」が単一の引数として渡されたとしても、eval
それを2つとして読み取ることに注意してください。
代わりに、文字列をコマンド自体として使用できます。
# The regular bash eval works by jamming all its arguments into a string then
# evaluating the string. This function treats its arguments as individual
# arguments to be passed to the command being run.
function eval_command() {
"$@";
}
の出力eval
と新しいeval_command
関数の違いに注意してください。
eval_command echo_arguments arg1 arg2 "Some arg"
結果:
Argument 1: arg1
Argument 2: arg2
Argument 3: Some arg
Argument 4:
$($cmd))
失敗したときに機能しました。常にコマンドが見つかりませんと表示されます。ありがとう!