Справка, анализирующая эту строку в сценарии удара

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

node="\\\\$1"

echo $node`echo $2|sed 's/\//\\\\/g'`

Заранее спасибо

2
задан 05.09.2010, 07:28

3 ответа

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

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

4
ответ дан 08.12.2019, 05:30

1-я строка: узел является переменным набором из командной строки. Так, если Вы делаете

runme.sh test

узел будет равняться "\test". Первая наклонная черта выходит из второй наклонной черты, рассматривая его как литеральную наклонную черту вместо специального модификатора.

Затем это заменяет любые обратные косые черты на имя с двумя наклонными чертами вправо, как так

> runme.sh test/ing

\\test\\ing

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

1
ответ дан 08.12.2019, 05:30

Это не ясно, какие части тех строк Вы испытываете затруднения при понимании, таким образом, я попытаюсь объяснить, что я думаю, липкие части.

Сценарий Вы продолжаете работать, берет по крайней мере два аргумента. К этим аргументам получают доступ в рамках сценария имена 1$ и 2$. В первой строке первая обратная косая черта выходит из символа после него, второй обратной косой черты, так, чтобы пара была оценена как единственная литеральная обратная косая черта. То же верно для второй пары обратных косых черт. 1$ заменяется значением первого аргумента сценарию. Если скрипт запущен как

myscript apple banana/cantaloupe

значение узла будет "\\яблоко" без кавычек.

Команды в задних галочках (') выполняются, затем задние галочки и вложенные команды заменяются выводом тех команд. sed управляйте заменяет каждую наклонную черту вправо в ее входном потоке парой обратных косых черт. Так как 2$ в этом примере являются "бананом/мускусной дыней", результатом команд в задних галочках был бы "банан \\мускусная дыня". Вывод второй строки является значением узла, связанного с результатом выражения обратной галочки, или "\\applebanana \\мускусная дыня".

1
ответ дан 08.12.2019, 05:30

Теги

Похожие вопросы