Eu tenho um script para o qual os usuários prefiram, em vez de acrescentar, argumentos, ou seja, podem chamar command C
, command B C
, command A B C
e assim por diante.
Eu gostaria de poder simplesmente passar esses argumentos da direita, da mesma maneira que você pode movê-los da esquerda com shift
.
Estou visualizando um comando shift-right
que se comporta assim:
echo "$@" # A B C
shift-right
echo "$@" # A B
shift-right
echo "$@" # A
shift-right
echo "$@" #
echo "$#" # 0
Existe uma maneira limpa de conseguir isso? Eu sei que posso contornar isso, mas uma solução semelhante a shift
seria muito mais agradável e simples.
Em resposta ao comentário do problema XY, meu caso de uso específico é um comando que usa uma porta ou um host e uma porta, por exemplo, command 123
ou command remotehost 123
. Eu não quero que os usuários precisem especificá-los na ordem inversa (porta e host).
Seria bastante claro dizer algo como (não testado, obviamente):
port=${@: -1}
shift-right
host=${1:-localhost}
Realmente, estou curioso sobre a questão em geral, mesmo que haja uma maneira melhor de resolver esse exemplo específico.
Aqui está uma maneira razoavelmente limpa de lidar com o caso de dois argumentos sem shift-right
, apenas para referência:
port=${@: -1}
host=${2:+$1}
host=${host:-localhost}
Mas esperamos que você possa entender como isso se torna mais complicado à medida que o número de argumentos aumenta.