Cuando uso el comando bash shift
, ¿Eso cambia el recuento de argumentos en $#
?
Nota del autor: Cuando tuve esta pregunta, no la encontré (todavía) en esta comunidad. Por lo tanto, simplemente lo probé y obtuve mi respuesta. Como pensé que podría ayudar a otros, publiqué lo que aprendí aquí como una pregunta con respuesta propia .
Responder
Sí, lo hace, se requiere explícitamente en el estándar :
shift [n]
Los parámetros posicionales se cambiarán. Al parámetro posicional 1 se le asignará el valor del parámetro (1 + n), […] y el parámetro «#» se actualizará para reflejar el nuevo número de posicionales parámetros.
Considere este script:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Llamarlo como script-file first second third
imprimirá 3
seguido de 2
.
Esto significa que podemos hacerlo cosas como:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… que imprimiría los argumentos uno por uno en su propia línea.
Comentarios
- … o lea el estándar que dice " … el parámetro ' # ' se actualiza para reflejar el nuevo número de parámetros posicionales. "
- Ese último fragmento de código podría ser reemplazado por
printf '%s\n' "$@"
ofor arg do echo "$arg"; done
. Sin embargo, esto obviamente no haría uso deshift
, solo produciría una salida idéntica.