Как Unix обрабатывает имя полного пути с пространством и аргументами?
В окнах мы заключаем путь в кавычки и добавляем параметры командной строки после, как это находится в Unix?
"c:\foo folder with space\foo.exe" -help
обновление:
Я имел в виду, как я распознаю путь от параметров командной строки.
Можно или заключить его в кавычки как пример Windows выше или выйти из пробелов с обратными косыми чертами:
"/foo folder with space/foo" --help
/foo\ folder\ with\ space/foo --help
Вы можете заключить в кавычки, если хотите, или можете избежать пробелов с предшествующим \, но большинство путей UNIX (за исключением Mac OS X) не содержат пробелов.
/Applications/Image\ Capture.app/Contents/MacOS/Image\ Capture
"/Applications/Image Capture.app/Contents/MacOS/Image Capture"
/Applications/"Image Capture.app"/Contents/MacOS/"Image Capture"
Все ссылаются на один и тот же исполняемый файл под Mac OS X.
Я не уверен, что вы имеете в виду при распознавании пути - если какой-либо из указанных выше путей передается в качестве параметра в программу, оболочка поместит всю строку в одну переменную - вам не нужно анализировать несколько аргументов чтобы получить весь путь.
Поскольку пробелы используются для разделения аргументов командной строки, они должны быть экранированы от оболочки. Это можно сделать с помощью обратной косой черты () или кавычек:
"/path/with/spaces in it/to/a/file"
somecommand -spaced\ option
somecommand "-spaced option"
somecommand '-spaced option'
Предполагается, что вы работаете из оболочки. Если вы пишете код, вы обычно можете передавать аргументы напрямую, избегая проблемы:
Пример в perl. Вместо этого:
print("code sample");
system («опция somecommand -spaced»);
вы можете сделать
print("code sample");
system («somecommand», «-spaced») option ");
Поскольку при передаче вызова system () список не разбивает аргументы в пространствах, как при вызове с одним аргументом.
Вы можете указать весь путь, как в окнах, или вы можете выйти из пробелов, как в:
/foo\ folder\ with\ space/foo.sh -help
Оба способа будут работать!
Также будьте осторожны с двойными кавычками - в оболочке Unix это расширяет переменные. Некоторые из них очевидны (например, $foo
и \t
), а некоторые нет (например, !foo
).
В целях безопасности используйте одинарные кавычки!
Если обычные способы не работают, попробуйте заменить пробелы на %20
.
Это сработало для меня при работе с SSH и другими командами в стиле домена, такими как auto_smb
.