Эта строка добавляет две обратные косые черты к первому аргументу сценария. Первая обратная косая черта в каждой паре избегает второй.
node="\\\\$1"
Эта строка принимает результат предыдущего и добавляет результат замены каждой косой черты во втором аргументе двумя обратными косыми чертами.
echo $node`echo $2|sed 's/\//\\\\/g'`
Если бы вы назвали свой сценарий так:
scriptname abc /def/ghi/jkl
тогда $node
будет "\\abc" и будет отображаться следующее:
\\abc\\def\\ghi\\jkl
$1
и $2
называются позиционными параметрами и представляют первый и второй аргументы вашего скрипта. Если вы хотите сослаться на все из них вместе, независимо от того, сколько (до предела, разрешенного вашей системой), вы бы использовали $@
или $*
.
Вот лучший способ написать эти две строки:
node='\\'"$1"
Используя одинарные кавычки вокруг обратной косой черты, вам не нужно избегать их. Использование двойных кавычек вокруг позиционного параметра позволяет его расширить.
echo $node$(echo $2 | sed 's|/|\\\\|g')
Использование $()
вместо обратных галочек более читабельно, их можно легко вкладывать, а цитирование и экранирование упрощаются. Используя альтернативный разделитель (в данном случае символ трубы) с sed
вам не нужно избегать косой черты, и все это более читабельно. В этом случае все еще необходимо избегать обратной косой черты, поскольку sed
обрабатывает их, а не Bash.
Если вы не знакомы с $()
(или обратными галочками), они выполняют подстановку команд, что означает, что выходные данные вложенной команды (команд) подставляются вместо них.
Возможно, вы не знакомы с sed
. Это внешняя по отношению к Bash (или другим оболочкам) утилита, которая может взять поток символов и отредактировать их. Конкретная команда, используемая здесь, это s
которая обозначает замену. Он заменит то, что находится между вторым и третьим разделителями (обычно это косая черта, но вы можете использовать практически любой символ) для шаблона между первым и вторым разделителями. g
- это модификатор, который вызывает глобальное замещение (т. Е. Каждый раз, когда оно происходит в строке ввода). Процесс повторяется для каждой строки ввода. В вашем примере есть только одна строка ввода - вывод эха.