Подтвердить что ты не робот

Как передать символ asterisk '*' в bash в качестве аргументов моей программе на C?

Скажем, у меня есть программа на C, и я запускаю ее из bash:

$ ./a.out 123 *

Программа выводит все аргументы командной строки, но он будет показывать их вместо:

Argument 1: 123
Argument 2: a.out

Что я могу сделать в своей программе, чтобы исправить это?

4b9b3361

Ответ 1

Оболочка заменяет звездочку именем каждого файла в каталоге.

Чтобы передать буквенную звездочку, вы можете ее избежать:

$ ./a.out 123 \*

Ответ 2

Вы можете процитировать его в оболочке

./a.out 123 '*'

Вы ничего не можете сделать в своей программе, потому что расширение * выполняется оболочкой (в отличие от Windows, где она выполняется программой).

Ответ 3

Другой вариант - использовать set -f, чтобы отключить расширение. Для сравнения:

echo *

против

set -f
echo *

Ответ 4

Это не имеет ничего общего с вашей программой.

* является подстановочным знаком в Bash, это означает "все файлы в текущем каталоге". Если вы хотите передать звездочку в качестве аргумента вашей программе, вы делаете ее так же, как и с любой другой программой: вы избегаете ее с помощью обратной косой черты или цитируете ее.

Ответ 5

Другой альтернативой является запуск script с #!/bin/bash -f в качестве первой строки, которая позволит вам принимать литеральные строки в качестве аргументов (включая звездочку) и, таким образом, позволит вам запустить ./a.out 123 * с помощью нужный ввод, но обратите внимание, что bash -f полностью отключает разложения и может иметь неблагоприятные последствия в вашем script в зависимости от того, что вы делаете.