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

26
задан Jay 5 November 2018 в 13:39
поделиться

5 ответов

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

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

$ ./a.out 123 \*
32
ответ дан James McNellis 5 November 2018 в 13:39
поделиться

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

2
ответ дан Mahn 5 November 2018 в 13:39
поделиться

Вы можете заключить его в кавычки в оболочке

./a.out 123 '*'

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

18
ответ дан 28 November 2019 в 04:22
поделиться

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

echo *

против.

set -f
echo *

Вы можете снова включить его, нажав set + f :

set -f
echo *
set +f
echo *
22
ответ дан 28 November 2019 в 04:22
поделиться

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

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

4
ответ дан 28 November 2019 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: