Como prevenir o bash de transformar argumentos?

1

Estou tentando usar um argumento do script para encontrar outros arquivos. O problema é que quando eu dou ao script o argumento x.* na linha de comando, ele é transformado em x.sh . Alguma idéia de como eu posso obter o x.* dentro do meu script?

O script na linha de comando: ./script.sh x.* . Se eu tentar imprimir $1 , ele gerará x.sh .

    
por Alex Gambix 14.01.2016 / 22:57

1 resposta

2

Você não pode fazer isso de dentro do seu script. * tem que ser escapado , caso contrário ele tentará encaixar nomes de arquivos (no seu caso x. , então qualquer coisa, como * é um operador glob que corresponde a qualquer string no nome do arquivo). Você pode fazer isso basicamente de três maneiras - coloque sua string entre aspas simples ou duplas:

./script.sh "x.*"
./script.sh 'x.*'

Ou prefixo de caractere problemático com barra invertida:

./script.sh x.\*

Como Jeff mencionou nos comentários (obrigado), você também pode desativar a expansão glob com:

set -o noglob

Você pode ativá-lo novamente com set +o noglob , se quiser.

    
por 14.01.2016 / 23:24