【Linux】bashで文字として評価してしまった環境変数中のクォーテーション・ダブルクオーテーションを再度引用符として評価する

$ echo 'a' 'b'

a b

$ export CMD="echo 'a' 'b'"
$ $CMD

‘a’ ‘b’

‘は文字となってしまっている。そのため、例えば以下の文は記号含む「'want-to-exclude.txt'」に一致するファイル名のみを除外してrsyncするコマンドになる。

$ export CMD="rsync -rtv --delete --exclude='want-to-exclude.txt' src/ dest/
$ CMD >> rsync.log

クォーテーションにしたいとき

  • その1 evalコマンド
$ eval $CMD

double scoreによる脆弱性に注意。

  • その2. そもそもそんなことしない
$ echo $PARAM1 $PARAM2 $PERMANENT_PARAM