Преобразование argv назад к единственной строке

Как вы знаете, где начинается значение? Если это всегда 5-е и 6-е слова, вы можете использовать, например, :

B=$(echo $A | cut -d ' ' -f 5-)

. Эта команда cut используется для вырезания части строки, используя простой пробел в качестве разделителя слов.

5
задан Roger Lipscombe 10 June 2009 в 13:29
поделиться

4 ответа

Перекомбинировать их вручную сложно:

Вы можете попытаться снова объединить их, я думаю, это сработает, но обязательно следуйте тем же правилам экранирования командной строки, что и окнам имеет . Это может быть нечто большее, чем простое решение, которое вы ищете.

Также, если есть какие-либо параметры, в которых есть пробелы, вы можете присоединить их к строке, заключив их в кавычки. Вот пример странного правила экранирования: если у вас есть --folderpath "c: \ test \" , то последняя обратная косая черта должна быть удвоена --folderpath "c: \ test \\ ".

Если вы используете MFC:

Вы можете получить желаемое значение из theApp.m_lpCmdLine вашего производного CWinApp. Обратите внимание, что вы все еще можете получить к ним доступ и другим способом с помощью __argc, и __argv или CommandLineToArgvW .

Если вы используете только Win32 (даже без GUI):

Вы можете получить его из WinMain . Что может быть точкой входа в вашу программу.

Обратите внимание, что вы все равно можете получить к ним доступ и другим способом с помощью __argc, __argv или CommandLineToArgvW .

Если вам необходимо использовать консольное приложение с main или wmain:

Win32 API GetCommandLine кажется правильным решением. Тем не менее, вам нужно будет разобрать это, чтобы обойти имя .exe. Учтите также кавычки вокруг имени / пути exe. Если в начале таких кавычек нет, просто перейдите к следующей позиции для начала.

s точка входа.

Обратите внимание, что вы все равно можете получить к ним доступ и другим способом с помощью __argc, __argv или CommandLineToArgvW .

Если вам необходимо использовать консольное приложение с main или wmain:

Win32 API GetCommandLine кажется правильным решением. Тем не менее, вам нужно будет разобрать это, чтобы обойти имя .exe. Учтите также кавычки вокруг имени / пути exe. Если в начале таких кавычек нет, просто перейдите к следующей позиции для начала.

s точка входа.

Обратите внимание, что вы все равно можете получить к ним доступ и другим способом с помощью __argc, __argv или CommandLineToArgvW .

Если вам необходимо использовать консольное приложение с main или wmain:

Win32 API GetCommandLine кажется правильным решением. Тем не менее, вам нужно будет разобрать это, чтобы обойти имя .exe. Учтите также кавычки вокруг имени / пути exe. Если в начале таких кавычек нет, просто перейдите к следующей позиции для начала.

Учтите также кавычки вокруг имени / пути exe. Если в начале таких кавычек нет, просто перейдите к следующей позиции для начала.

Учтите также кавычки вокруг имени / пути exe. Если в начале таких кавычек нет, просто перейдите к следующей позиции для начала.

7
ответ дан 13 December 2019 в 22:14
поделиться

Вы можете использовать Функция GetCommandLine

Почему бы не использовать «WinMain» вместо «main»? Это должно дать вам строку в желаемом формате.

2
ответ дан 13 December 2019 в 22:14
поделиться

Есть вызов Win32 API, который возвращает командную строку: GetCommandLine

1
ответ дан 13 December 2019 в 22:14
поделиться

Если у вас есть строка, выделенная с достаточным пространством, используйте strcat по каждому элементу в списке. Да, это так же просто, как объединить их вместе с пробелами.

0
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

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