Use aspas simples:
[root@xxx601 ~]# ./stack \my\share\is\here
You Gave Me: \myshareishere
[root@xxx601 ~]# ./stack '\my\share\is\here'
You Gave Me: \my\share\is\here
Eu quero criar um script bash com um UNC "puro" (ou seja, eu não quero escapar literalmente das barras invertidas) como um argumento, ou seja, algo como:
./foo \my\share\is\here
No entanto, como é natural, o script acima diz:
\myshareishere
Posso de alguma forma ler o UNC exato como argumento e armazená-lo em uma variável?
Experimente:
./foo \\my\share\is\here
ou:
./foo \my\share\is\here
Depende se você quer dobrar '\' no início ou não.
Se você quiser executar o comando ./foo
com o argumento \my\share\is\here
em um script de shell, será necessário usar alguma forma de quoting , porque o caractere de barra invertida tem um significado especial do shell. A forma mais simples de citar é colocar aspas simples em torno do argumento: tudo entre um par de aspas simples é tratado literalmente, o único caractere que você não pode incluir dessa maneira é o caractere de aspas simples em si.
./foo '\my\share\is\here'
Se o seu script é foo
e você quer executá-lo com o argumento \my\share\is\here
na linha de comando, então você também precisa usar aspas (a linha de comando é um shell).
Se você digitar ./foo \my\share\is\here
, foo
não terá como saber o que você digitou. É o shell que executa foo
que analisa a linha de comando e decide que o espaço após ./foo
é um separador de palavras e que a primeira palavra é um nome de comando a ser executado e a segunda palavra é um argumento, e esse caractere seqüências da forma barra invertida + algo representam o caractere algo. É apenas o mesmo fenómeno de escrever foo ; bar
: este é um comando da shell para executar foo
e, em seguida, bar
; ele não passa a string ; bar
para foo
. Da mesma forma, ./foo \my\share\is\here
executa ./foo
com o argumento \myshareishere
. Se você quiser executar ./foo
com o argumento \my\share\is\here
, será necessário escrever o que você quer dizer, por exemplo, ./foo '\my\share\is\here'
(ou ./foo \\my\share\is\here
ou ./foo '\'"\m"y\share'\is\'"here"""
ou qualquer outra variação).
Tags bash shell-script arguments quoting