Рассмотрим следующий код:
#!/bin/bash -x
VAR='1 2 3'
bash -c "echo "\$$VAR""
eval "echo "\$$VAR""
bash -c "echo \"\$$VAR\""
eval "echo \"\$$VAR\""
Какие выходы:
+ VAR='1 2 3'
+ bash -c 'echo $1' 2 3
3
+ eval 'echo $1' 2 3
++ echo 2 3
2 3
+ bash -c 'echo "$1 2 3"'
 2 3
+ eval 'echo "$1 2 3"'
++ echo ' 2 3'
 2 3
Кажется, что оба eval и bash -c интерпретируют коды так же, как i.e "echo "\$$VAR"" до 'echo $1' 2 3 и "echo \"\$$VAR\"" до 'echo "$1 2 3"'.
Единственное отличие, которое я, по-видимому, замечаю, заключается в том, что bash -c открывает подоболочку и таким образом изменяет результаты от eval. Например, в
bash -c 'echo $1' 2 3
2 и 3 - позиционные параметры для подоболочки. С другой стороны, в
eval 'echo $1' 2 3
это просто еще один аргумент для echo.
  Итак, мой вопрос в том, является ли опция -c (bash -c, sh -c или другие эквиваленты оболочек) безопасной для использования или она зла, как eval?
