cd: слишком много аргументов - пробелы правильно экранированы + заключены в кавычки? - PullRequest
0 голосов
/ 26 февраля 2019

Используя терминал cygwin, у меня в .bashrc есть следующее:

export WINHOME="/cygdrive/c/Users/userName"
export TUTORING="$WINHOME/Desktop/Coding\ Projects/Tutoring/"

Когда я открываю cygwin, вот что происходит:

$ cd $TUTORING
-bash: cd: too many arguments

Итак, я попробовал:

$ echo $TUTORING
/cygdrive/c/Users/userName/Desktop/Coding\ Projects/Tutoring

Скопируйте и вставьте вывод из echo:

cd /cygdrive/c/Users/userName/Desktop/Coding\ Projects/Tutoring 

И это похоже на работу.Любая идея, почему CD имеет проблемы с моей переменной?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Разделение слов происходит после раскрытия переменной.Начиная с man bash:

Оболочка сканирует результаты раскрытия параметров, подстановки команд и арифметического расширения, которые не встречались в двойных кавычках для разбиения слов.

Оболочка обрабатывает каждыйсимвол IFS в качестве разделителя и разбивает результаты других расширений на слова, используя эти символы в качестве разделителей полей.

Правильный способ - использовать двойные кавычки:

export TUTORING="$WINHOME/Desktop/Coding Projects/Tutoring/"
cd "$TUTORING"
0 голосов
/ 26 февраля 2019

Используйте двойные кавычки для экранирования всего пути.

Поскольку пробел внутри пути, команда cd считает, что есть несколько параметров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...