Escape shell arg из одного сценария в другой

Дано ./mysh0 :

 #!/bin/bash exec ./mysh1 $* 

И ./mysh1 :

 #!/bin/bash echo $1 echo $2 echo $3 

Как мне называть mysh0 , что аргументы mysh1 и то, что в конечном итоге напечатано, это «A», «B 2» и «C»?

Вызов этого как ./mysh0 A "B 2" C не работает.

One Solution collect form web for “Escape shell arg из одного сценария в другой”

Вы должны использовать "$@" вместо $* :

 exec ./mysh1 "$@" 

Это правильный способ расширить все позиционные аргументы как разделенные слова.

Когда вы используете $* , все позиционные аргументы были объединены в одну длинную строку с первым значением IFS качестве разделителя, по умолчанию равным пробелу, вы получили AB 2 C

Теперь, поскольку вы используете $* без двойной кавычки (что может привести к последствиям безопасности и заставить ваш скрипт задохнуться ), оболочка выполняет split+glob на нем. Длинная строка, которую вы получили выше, была разделена на четыре слова: A , B , 2 и C

Поэтому вы фактически передали четыре аргумента mysh1 вместо трех.

  • Сед найти и заменить косой чертой
  • Сценарий Bash для запуска команд tmux и issue
  • Скрипт с несколькими арифметическими условиями не работает
  • Как я могу добавить префикс для ввода, который я получаю из канала через awk, и условно окрасить префикс?
  • Объедините две команды в .bash_profile
  • используя переменную «файл», полученную из «for» файла «in», и перейти к другому скрипту не удалось
  • Получить имя эмулятора терминала внутри сценария оболочки
  • Что-то не так с пространством в zenity, пытающимся создать скрипт
  • Делайте работу «читать», когда не фокусируетесь на терминале
  • Как настроить mutt для отображения заголовка даты в моем локальном часовом поясе в пейджере?
  • Почему точка посередине пути?
  • Linux и Unix - лучшая ОС в мире.