Я не могу передать строки, начинающиеся с #
аргументов командной строки.
Вот простой тест:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
printf("%s ", argv[i]);
putchar('\n');
return 0;
}
Если я введу аргументы следующим образом:
2 4 # 5 6
Ценность argc
есть 3
и нет 6
. Это читает #
и останавливается там. Я не знаю почему, и я не могу найти ответ в моих копиях языка программирования C и C Primer Plus .
c
bash
command-line-arguments
CD-00
источник
источник
Ответы:
#
начинается комментарий в оболочках Unix, как//
в C.Это означает, что когда оболочка передает аргументы программе, она игнорирует все, что следует за #. Экранирование с помощью обратной косой черты или кавычек будет означать, что он обрабатывается так же, как и другие параметры, и программа должна работать так, как ожидается.
или
или
Обратите внимание, что
#
это символ комментария только в начале слова, поэтому это также должно работать:источник
echo echo Hello, World | bash
. Это интерактивно? Или может бытьbash <<END
?При передаче значения через аргументы командной строки вы должны пройти через следующие инструкции. Следующие символы имеют особое значение для самой оболочки в некоторых контекстах и, возможно, должны быть экранированы в аргументах:
источник
2 4 \{#,$,&,*} 5 6
Это потому, что вы используете
sh
подобную оболочку. Цитировать#
или избежать его с помощью,\
и он будет работать.Это называется комментарием в
sh
. Он вызывает#
(пробел) и любые аргументы после него отбрасываются. Он используется аналогично комментариям в C, где он используется для документирования кода.Строки, начинающиеся с
$
, называются переменными вsh
. Если вы не установили переменную, она развернется в пустую строку.Например, все это будет правильным способом передачи
#
вашего приложения:И это будут правильные способы передачи строки, начинающейся с
$
:Обратите внимание, что переменные внутри
"
s все еще раскрыты.источник