Оболочка заменяет звездочку именем каждого файла в каталоге.
Чтобы передать буквальную звездочку, вы должны быть в состоянии избежать ее:
$ ./a.out 123 \*
Другой альтернативой является запуск вашего скрипта с #!/bin/bash -f
в качестве первой строки, что позволит вам принимать буквенные строки в качестве аргументов (включая звездочку), и, таким образом, позволит вам запустить ./a.out 123 *
с нужным вводом , но учтите, что bash -f
полностью отключает расширения, и это может иметь неблагоприятные последствия в вашем скрипте в зависимости от того, что вы делаете.
Вы можете заключить его в кавычки в оболочке
./a.out 123 '*'
Вы ничего не можете сделать в своей программе, потому что расширение * выполняется оболочкой (в отличие от Windows, где это делается программой).
Другой вариант - использовать set -f
, чтобы отключить расширение. Сравните:
echo *
против.
set -f
echo *
Вы можете снова включить его, нажав set + f
:
set -f
echo *
set +f
echo *
Это не имеет ничего общего с вашей программой.
*
- это подстановочный знак в Bash, он означает «все файлы в текущем каталоге». Если вы хотите передать звездочку в качестве аргумента вашей программе, вы делаете это так же, как и с любой другой программой: вы экранируете ее с помощью обратной косой черты или заключаете ее в кавычки.