-5

Если у меня есть программа с именем "prog", которая требует только один аргумент, я могу написать:

./prog <<< 1

Но если у меня есть программа, которая требует 2 аргумента, почему это не работает:

./prog <<< 2 3

Я не мог найти ответ Googling. Как это может работать?

Примечание: мне нужно это, чтобы написать .sh

3 ответа3

3

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

Синтаксис:

command <<< word

… Расширяет word и передает его command качестве стандартного ввода.

Это эквивалентно:

echo word | command

Если вы действительно хотели передать как 1, так и 2 как стандартный ввод (не аргументы / параметры), вы можете сделать это с помощью:

./command <<< "1 2"

или же

./command <<< 1\ 2

По сути, вам нужно избежать пробела между 1 и 2, чтобы не разбить ввод на два слова.

-1

Я не смог найти ссылку на оператор «<<<» для bash, но, похоже, он брал текст сразу после оператора и анализировал его как первую переменную.

Если вы пишете скрипт BASH, это не нужно. Вы можете просто использовать $ X для каждой переменной, а затем добавить переменные в скрипт. Например:

/bin/bash
echo "Usage:  $0 variable1 variable2"
echo "Variable 1 value is $1"
echo "Variable 2 value is $2"

Поэтому, если вы сохраните вышеуказанный файл как «test.sh», сделайте его исполняемым, запустите его как ./test.sh hello world

Будет выведено Использование: ./test.sh переменная1 переменная2 Значение переменной 1 - это привет Значение переменной 2 - это привет мир

$ 0 = название скрипта. Если вы хотите передать 2 параметра с пробелами, например "Hello World" и "Это тест", вы бы назвали его как ./test.sh "Hello World" "his is a test"

-1

Вот как я решил свою проблему:

#/bin/bash
(echo 1 2)  |  ./prog

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .