Esta linha adiciona duas barras invertidas ao primeiro argumento do script. A primeira barra invertida em cada par escapa do segundo.
node="\\$1"
Esta linha pega o resultado do anterior e acrescenta o resultado de substituir cada uma das barras no segundo argumento por duas barras invertidas.
echo $node'echo $2|sed 's/\//\\/g''
Se você fosse chamar seu script assim:
scriptname abc /def/ghi/jkl
então $node
seria "\\ abc" e o seguinte seria ecoado:
\abc\def\ghi\jkl
Os $1
e $2
são referidos como parâmetros posicionais e representam o primeiro e o segundo argumentos para o seu script. Se você quisesse se referir a todos eles juntos, independentemente de quantos (até o limite permitido pelo seu sistema), você usaria $@
ou $*
.
Aqui está uma maneira melhor de escrever essas duas linhas:
node='\'"$1"
Usando aspas simples ao redor das barras invertidas, você não precisa escapar delas. Usar aspas duplas em torno do parâmetro posicional permite que ele seja expandido.
echo $node$(echo $2 | sed 's|/|\\|g')
Usar $()
em vez de backticks é mais legível, eles podem ser facilmente aninhados e as citações e escapes são simplificados. Usando um delimitador alternativo (neste caso, o símbolo de pipe) com sed
você não precisa escapar da barra e a coisa toda é mais legível. As barras invertidas ainda precisam ser escapadas nesse caso, pois sed
está processando-as em vez de Bash.
Se você não estiver familiarizado com $()
(ou backticks), eles executam a substituição de comando, o que significa que a saída do (s) comando (s) incluído (s) é substituída em seu lugar.
Você pode não estar familiarizado com sed
. É um utilitário que é externo ao Bash (ou outros shells) que pode receber um fluxo de caracteres e editá-los. O comando específico em uso aqui é s
, que significa substituto. Ele substituirá o que é encontrado entre os segundo e terceiro delimitadores (geralmente barras, mas você pode usar quase qualquer caractere) para o padrão entre o primeiro e o segundo delimitadores. O g
é um modificador que faz com que a substituição seja feita globalmente (ou seja, sempre que ocorre na linha de entrada). O processo é repetido para cada linha de entrada. No seu exemplo, há apenas uma linha de entrada - a saída do eco.