Подтвердить что ты не робот

Выполнить команду, содержащую кавычки из переменной оболочки

В настоящее время у меня возникают проблемы с выполнением команды из переменной оболочки.

В целом, следующее работает как ожидалось:

COMMAND="echo A"
echo $COMMAND
$COMMAND

дает:

echo A
A

Но если я делаю

COMMAND="su aUser -s /bin/bash -c 'echo A'"
echo $COMMAND
$COMMAND

Я получаю

su aUser -s /bin/bash -c 'echo A'
Password: 
A': -c: line 0: unexpected EOF while looking for matching `''
A': -c: line 1: syntax error: unexpected end of file

Если я введу строку

su aUser -s /bin/bash -c 'echo A'

прямо работает, как и ожидалось.

Похоже, что мое предположение о том, что $COMMAND равно вводить содержимое, поскольку команда напрямую неверна.

Вопросы

1) Кто-нибудь знает, как я могу запустить команду из переменной?

2) В чем разница между

COMMAND="command"
$COMMAND

и

command

?

4b9b3361

Ответ 1

Вам нужно eval.

$ eval $VARIABLE

Ответ 2

Массивы полезны для сохранения ваших параметров целиком:

command=(su aUser -s /bin/bash -c 'echo A')

и вызывать его точно так:

"${command[@]}"