Эта строка добавляет две обратные косые черты к первому аргументу сценария. Первая обратная косая черта в каждой паре избегает второй.
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 - это модификатор, который вызывает глобальное замещение (т. Е. Каждый раз, когда оно происходит в строке ввода). Процесс повторяется для каждой строки ввода. В вашем примере есть только одна строка ввода - вывод эха.