Remove noglob da variável $ @

1

Eu quero passar um argumento para o shell script, mas estou recebendo noglob on como um argumento de saída.

a.sh

#!/bin/ksh
set filec on
set noglob on
echo $@

Quando executo o shell script com um argumento como 123, estou obtendo uma saída como abaixo, em vez de 123. Mesmo eu tentei unset noglob e set noglob off , mas ainda estou obtendo a mesma saída. Por favor me ajude a superar isso.

@sh a.sh 123 
noglob on
    
por Gvtha 15.02.2018 / 10:31

2 respostas

2

Eu acho que você pretendia fazer:

set -o filec
set -o noglob

set sem nenhuma das opções define os argumentos como parâmetros do shell. De man mksh :

Options can be changed using the +-o option syntax, where option is the long name of an option, or using the +-letter syntax, where letter is the option's single letter name (not all options have a single letter name).

(Mas não consigo encontrar uma opção de shell chamada filec em mksh , pelo menos.)

    
por 15.02.2018 / 10:41
2

Ao usar set da maneira como você faz em um shell semelhante a sh- :

set noglob on

você realmente modifica $@ substituindo os argumentos dados na linha de comando por noglob e on (como se você tivesse chamado o script com sh a.sh noglob on ).

Para definir a opção de shell noglob , use

set -o noglob

Nem sh nem ksh tem uma opção de shell chamada filec , até onde eu sei.

Observe que, se você invocar o script com um intérprete explícito como sh , a #! -line será ignorada.

Como seu script se parece com um script tcsh ou csh (a sintaxe set é absolutamente correta e esses shells também têm uma opção filec shell, mas a variável $@ não está em csh , tanto quanto eu sei):

Se for um script csh ou tcsh que você está escrevendo, certifique-se de invocar o script com csh ou tcsh ou, se o script for executável e chamado sem um intérprete explícito, que a linha #! aponta para o apropriado destes dois.

Resumindo, certifique-se de saber em que idioma você está escrevendo seu script e use o interpretador correto.

    
por 15.02.2018 / 12:16