コマンドを変数に格納して実行する方法
変数に格納したコマンドの引数にスペースが入っていると想定通りに動作しないことがある。
sample.sh
set -x
SAY_HELLO='echo "hello !!"'
$SAY_HELLO
上記のように記述して実行するとecho '"hello' '!!"'
を実行していることになる。
$ sample.sh
+ SAY_HELLO='echo "hello !!"'
+ echo '"hello' '!!"'
"hello !!"
想定どおり動作させるためには以下のように記述する。
sample.sh
set -x
SAY_HELLO='echo "hello !!"'
eval "$SAY_HELLO"
+ SAY_HELLO='echo "hello !!"'
+ eval echo '"hello' '!!"'
++ echo 'hello !!'
hello !!
echo 'hello !!'
が実行されている。