Basicamente, quero "extrair" a primeira ocorrência da -inf
lista de parâmetros. (Os parâmetros restantes serão passados para um comando diferente.)
O script que eu tenho tem a seguinte estrutura:
#!/bin/sh
<CODE>
for POSITIONAL_PARAM in "$@"
do
<CODE>
if [ "$POSITIONAL_PARAM" = '-inf' ]
then
<PLUCK $POSITIONAL_PARAM FROM $@>
break
fi
<CODE>
done
<CODE>
some-other-command "$@"
# end of script
Existe uma boa maneira de fazer isso?
BTW, embora eu esteja interessado principalmente em respostas aplicáveis a /bin/sh
, também estou interessado nas respostas aplicáveis apenas a /bin/bash
.
Respostas:
POSIXly:
O código acima até funciona em shells pré-POSIX, exceto o shell Almquist original (Read Endnote ). Mude o
for
loop para:garantir o trabalho em todas as conchas.
Outro POSIX:
Com este, você precisa remover o primeiro
(
em(pattern)
fazê-lo funcionar em conchas pré-POSIX.fonte
$1
). Essa propriedade foi útil no que estou fazendo. Além disso, obrigado por me lembrar que a partein "$@";
no topo dofor
loop é desnecessária. É algo que eu já vi antes, mas costumo esquecer. Em relação à sua observação sobre a concha Almquist, elado
precisa aparecer na próxima linha oufor arg; do
funcionaria também?for arg; do
trabalho em Almquist shellfor arg do
é uma expressão abreviada parafor arg in "$@"; do
. Isso me jogou por cerca de 5 segundos! Alguns podem dizer que o último é mais legível :)Encontrei essa pergunta enquanto tentava resolver um problema semelhante, mas queria processar todos os argumentos que não são de opção (aqueles que não começam com
-
) até os recebidos.--
separador . Eu queria extrair apenas os argumentos processados e deixar os restantes in situ na ordem fornecida.Aqui está o que eu criei.
fonte