Argumento UNC no bash scipt

1

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?

    
por trikelef 15.01.2015 / 17:15

3 respostas

3

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
    
por 15.01.2015 / 17:25
2

Experimente: ./foo \\my\share\is\here

ou: ./foo \my\share\is\here

Depende se você quer dobrar '\' no início ou não.

    
por 15.01.2015 / 18:04
2

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).

    
por 16.01.2015 / 01:47