Допустимые команды для использования в обратных галках в 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;"
}
Во втором случае оболочка просто читает содержимое файла и выполняет его. Таким образом, это работает.
Вы также можете обратиться к разделению слов в руководстве. Также смотрите: я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!,