[пока не могу ответить на другие ответы, поэтому отвечаю на вопрос]
«Возможно ли получить аргумент с помощью«; », не используя« \ »в аргументе командной строки. Возможно ли мне включить« \ »из моей программы после получения argv?»
Нет, это невозможно. Интерпретация ";" выполняется оболочкой перед тем, как попасть в вашу программу, поэтому, если вы не уйдете при вызове, ваша программа никогда не узнает о «;» то есть
PROG1 parms; PROG2
заставит оболочку (которая интерпретирует то, что вы печатаете) сделать следующее:
запустите PROG1 и передайте ему parms.
как только PROG1 будет завершен, запустите PROG2
Существует ряд специальных символов, которые оболочка примет по умолчанию, и ваша программа никогда не увидит: * для подстановочных знаков, | для каналов, для параллельного выполнения и т. д. Ничто из этого не будет видно при запуске программы, они просто сообщают оболочке делать специальные действия.
В качестве альтернативы использованию «\», вы можете заключить свой параметр в одинарные или двойные кавычки (которые различаются, но для вашего примера оба будут работать). т.е .:
./a.out "привет; ls"
./a.out 'привет; ls'
Обратите внимание, что они будут работать для опции printf, если вы вызываете "system", вы фактически говорите C, чтобы запустить оболочку для запуска того, что вы передаете, так что ввод снова будет подвергнут интерпретации оболочки.