Como lidar com mais de 10 parâmetros no shell

101

Estou usando o bash shell no linux e quero usar mais de 10 parâmetros no shell script

Ashitosh
fonte
8
Observe que ter 10 parâmetros o tornará bastante confuso. Talvez seja melhor usar opções (por exemplo, -a 1ou --foo=bar). Veja man getopt, man getoptse man bashpara algumas opções para fazer isso.
Mikel

Respostas:

158

Use chaves para destacá-los:

echo "${10}"

Você também pode iterar os parâmetros posicionais como este:

for arg

ou

for arg in "$@"

ou

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done
Pausado até novo aviso.
fonte
2
Observe que $ {10} funcionará em bash, mas limitará sua portabilidade, pois muitas implementações de sh só permitem especificações de um dígito.
William Pursell
1
@William: Existem alguns shells que não o aceitam, como o shell Bourne original, mas além dos shells que listei em outro comentário (Bash, dash, ksh e zsh), ele também funciona em csh, tcsh e Busybox ash.
Pausado até novo aviso.
1
@WilliamPursell ${10}é definido pela POSIX
Steven Penny
2
A preocupação com o ${10}trabalho só é necessária ao usar implementações muito antigas que não são compatíveis com o padrão. Provavelmente apenas de interesse histórico ... mas ainda não o usei! Suponho que seja porque a prática recomendada dita que 10 argumentos são demais, a menos que sejam repetidos, caso em que você irá iterá-los em "$@"vez de enumerá-los.
William Pursell
22

Você pode ter até 256 parâmetros de 0 a 255 com:

${255}
Lukuluku
fonte
5
Acho que esse limite depende do shell. Bash, dash, ksh e zsh não parecem ter. sh -c 'echo ${333}' /usr/bin/*
Pausado até novo aviso.
3
Minha concha chega confortavelmente a 2 milhõesset $(seq 2097152); echo ${2097152}
Steven Penny