В последнее время я использовал unix cygwin и добавил много инструментов, а командная строка и сценарии стали гораздо более знакомыми. Написание сценариев и программирование - моя главная цель и вопрос за 100 тысяч долларов? Я еще не выскользнул из окон.

Сообщение здесь -> решило дилемму пользователей ! сделал многое, чтобы упростить использование / переключение путей и каталогов. Лучше, чем открывать блокнот ++ и делать это! Именно эта команда

# cd "$(cygpath -u 'c:\Program Files\')" 

Бен работает на лету в bash для меня, чтобы позволить эффективно создавать сценарии.

Может кто-то ради программирования сломать его по частям?

Я заметил, что есть 2 команды и - кавычки и круглые скобки «разделяют» $, который, как я полагаю, является переменным заполнителем ???

Я всегда заканчиваю тем, что думаю, что это встроенная оболочка, легкий ответ, но все же нужно выяснить. И двойные кавычки снаружи - для чего, в то время как внутренние одиночные кавычки - для пространственных и буквальных интерпретаций оболочкой.

Что именно делает оболочка от начала до конца? Я полагаю, что запуск отладки может быть вариантом, как мне сделать это, чтобы показать результаты? Спасибо за ответ.

Наконец, я не упомянул, что я использовал, чтобы попытаться преобразовать пути. Видел материал для строк sed, но никогда не работал из-за сложности, это намного проще.

1 ответ1

1

Распространенным заблуждением является то, что знак $ означает переменную. На самом деле это сигнализирует bash о выполнении раскрытия (есть случаи, когда на переменные можно ссылаться без знака $, но я не буду слишком отвлекаться от темы).

Когда bash видит знак $ перед переменной, он заменит $ VAR значением (переменной) и затем выполнит всю строку.

В вашем примере bash будет выполнять подстановку / расширение команды. В скобках указана команда, bash сначала выполнит эту команду, возьмет вывод и заменит ей $(command), а затем выполнит команду cd .

Вы можете наблюдать это поведение, глядя на след. Запустите ваш скрипт, используя bash -x или поместите set -o xtrace ниже заголовка вашего скрипта. Пример:

#!/bin/bash
set -o xtrace

Это выведет точные команды, которые bash выполняет во время сценариев, что означает, что после замены / расширения произошли.

Что касается кавычек, они не являются необходимыми на 100%, но могут быть ситуации, в которых команда в вашем примере не будет работать должным образом. И это если в пути есть пробелы, возвращаемые cygpath -u 'c:\Program Files\' . Аргументы команды Bash обычно разделяются пробелами, и без кавычек bash будет интерпретировать эти пробелы как разделитель, а не как литеральный пробел (также причина, по которой существуют одинарные кавычки вокруг пути, указанного для команды cygpath).

Например, если возвращенный путь был c:\user\Documents and Settings , без кавычек bash будет читать команду как cd c:\user\Documents and Settings , в которой он будет думать, что c:\user\Documents , and и Settings - это все аргументы, передаваемые команде cd . Это проблема, потому что команда cd должна иметь только один аргумент.

Двойные кавычки вокруг $ substitution препятствуют интерпретации пространства.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .