Допустимые команды для использования в обратных галках в bash?

Рассмотрим две команды,

command1="mysql -umyuser -pmypassword -e \"show databases;\";"
command2="cat stackru.txt"

Строки формируются следующим образом,

echo ${command1} -> mysql -umyuser -pmypassword -e "show databases;";
echo ${command2} -> cat stackru.txt

Моя цель - запустить команду из переменной и сохранить ее результат в другой.

Так что я делаю,

result1=`${command1}`
ERROR 1049 (42000): Unknown database 'databases;";'

НО,

result2=`${command2}` 

отлично работает

Когда используешь $() вместо галочек команды ведут себя одинаково.

Обе эти команды прекрасно работают, когда запускаются непосредственно в обратных кавычках вместо переменной.

Почему это другое поведение?

1 ответ

Решение

Следующие:

command1="mysql -umyuser -pmypassword -e \"show databases;\";"

не удается из-за разделения слов. Когда ты сказал $command1оболочка интерпретирует это как:

mysql -umuuser -pmypassword -e '"show' 'databases;";'

Таким образом, параметр передан -e вариант "show а не то что ты думал.

Вместо этого используйте функции:

mycommand() {
  mysql -umyuser -pmypassword -e "show databases;"
}

Во втором случае оболочка просто читает содержимое файла и выполняет его. Таким образом, это работает.

Вы также можете обратиться к разделению слов в руководстве. Также смотрите: я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!,

Другие вопросы по тегам