Сколько аргументов передается команде в оболочке: - PullRequest
0 голосов
/ 26 октября 2019

Я хочу выяснить, сколько аргументов передается команде с помощью оболочки:

echo "It's "'funny how'" it's done."  

Это 1 аргумент, потому что сначала «выключить» после s, а после «выключить»следующий ", поэтому первый" соответствует последнему ".

Для

"<bar bar -b "-a" '-r' >bar bar bar"

Я не понимаю, почему команде передается 5 аргументов

pig pig pig

enter image description here

6   arguments passed to command by shell

1 Ответ

1 голос
/ 26 октября 2019

Bash преобразует свои входные данные в токены на основе последовательности

  • Цитирование
  • Расширение (расширение фигурных скобок, расширение тильды, расширение параметров и переменных, подстановка команд, расширение арифметики, разбиение слов и расширение пути)

Применение вышеуказанного к: echo "It's "'funny how'" it's done.":

  1. удаление из кавычек приведет к 3 заменам ('*'указать место в кавычках)
    1. в двойных кавычках It's*
    2. в одинарных кавычках funny*how
    3. в одинарных кавычках *it's*done.
  2. Разделение слов ищет пробелы без кавычек для разделения на аргументы. При отсутствии пробелов без кавычек все вышеперечисленное объединяется в один аргумент. It's*funny*how*it's*done.

Обратите внимание, что кавычки не являются вложенными, как подразумевается в вопросе (например, одинарная кавычка в двойных кавычках НЕ имеет специального значения).

После <pig pig -x " " -z -r" " >pig pig pig('*' - пробел в кавычках, '_' - пробел без кавычек).

  1. удаление из кавычек приведет к двум заменам ('*' означает пробел в кавычках)

    1. Без кавычек <pig_pig_-x_ 2, Двойные кавычки *
    2. Без кавычек _-z_-r
    3. Двойные кавычки *
    4. Без кавычек '_> pig_pig_pig`
  2. Разделение слов обработает объединенное <pig_pig_-x_*_-z_-r*_>pig_pig_pig. Разделение на без кавычек пробелы: "свинья", "свинья", "свинья". «Свинья» будет обработана оболочкой: перенаправление ввода и вывода. В результате получается 7 параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...