Пожалуйста, прочитайте раздел с заголовком QUOTING в bash (1) (man bash
).
В вашем первом примере,
echo "C:\Users\Ted\Documents\Unix\Scripts" | xargs echo
оболочка интерпретирует (а затем удаляет) обратные слэши внутридвойные кавычки, поэтому первая команда echo
видит только строку C:UsersTedDocumentsUnixScripts
.
Во втором примере
echo 'C:\Users\Ted\Documents\Unix\Scripts' | xargs echo
одинарные кавычки правильно защищают обратную косую черту, как вы можете видетьзапустив только первую команду echo
, без | xargs echo
.
Во всех оставшихся примерах
cyg0 C:\Users\Ted\Music\Enigma
cyg1 C:\Users\Ted\Music\Enigma
...
, поскольку аргумент (C:\Users\Ted\Music\Enigma
) без кавычек, один разснова оболочка интерпретирует и удаляет обратную косую черту до того, как команда (cyg0
, cyg1
, ...) когда-либо их увидит.И ...
Я хочу иметь возможность печатать C: \ Users \ Ted \ Music \ Enigma без кавычек.
Извините, это не может быть сделано,Если вы не ставите обратную косую черту в одинарных кавычках, оболочка интерпретирует каждую из них как символ кавычки для символа, следующего за ним, а затем удаляет обратную косую черту.
У вас есть несколько вариантов:
Используйте одинарные кавычки в командной строке для защиты от обратной косой черты:
cyg4 'C:\Users\Ted\Music\Enigma'
Заключайте в кавычки каждый символ обратной косой черты отдельно, удваивая его, например,
cyg4 C:\\Users\\Ted\\Music\\Enigma
Вместо этого используйте косую черту:
cyg4 C:/Users/Ted/Music/Enigma
Вариант 3 действительно может быть вашим лучшим решением.К сожалению, символ обратной косой черты - это очень особенный символ для всех оболочек Unix, и это вызывает много неприятностей при цитировании при работе с путями DOS / Windows.Но что не очень широко известно, так это то, что DOS / Windows также очень рады использовать косую черту (/
) в качестве разделителя пути.Попробуйте.
Примечание. Из ваших нескольких функций cyg * верны только cyg1 и cyg4.Остальные используют некорректное цитирование.cyg1 полезен только с одним аргументом, поскольку он объединяет все аргументы в одну строку в кавычках, тогда как cyg4 может принимать и передавать несколько аргументов в cygpath.Однако, поскольку cyg4 передает только свои аргументы в кавычках, он не добавляет никакого значения;это действительно ничем не отличается от, например,
cygpath C:/Users/Ted/Music/Enigma
Удачи.