Respuestas:
${#1}es la longitud (en número de caracteres) de la $1cual es el primer argumento de la función.
Entonces, (( ${#1} == 0 ))es una forma complicada de probar si el primer argumento está vacío (o no, los parámetros no establecidos aparecen como vacíos cuando se expanden) o no.
Para probar un parámetro vacío, la forma canónica es:
[ -z "$1" ]
Pero allí, lo más probable es que la intención fuera verificar si se proporcionó un argumento a la función, en cuyo caso la sintaxis sería:
[ "$#" -eq 0 ]
(o (($# == 0))si desea que su script sea específico para ksh / bash / zsh).
Sin embargo, en ambos casos, los proyectiles tipo Bourne tienen atajos para eso:
test=${1:--} # set test to $1, or "-" if $1 is empty or not provided
test=${1--} # set test to $1, or "-" if $1 is not provided
Ahora, si la intención es pasar eso catu otra utilidad de texto para que -se pase (es decir, stdin) cuando no se proporciona ningún argumento, entonces es posible que no necesite nada de eso.
En vez de:
getlable() {
test=${1--}
cat -- "$test"
}
Solo haz:
getlable() {
cat -- "$@"
}
La lista de argumentos de la función se pasará tal cual cat. Si no hay argumento, catno recibirá ningún argumento (y luego leerá desde stdin como si hubiera sido un -argumento único ). Y si hay uno o más argumentos, todos se pasarán tal cual cat.
${#1} es la longitud del primer parámetro posicional.
En un shell en ejecución puedes usar
set -- foo bar
echo ${#1}
3
para establecerlos
echo ${#1}antes de esa declaración para ver cuál es el valor? Si es así, generalmente debe incluir lo que encontró en esa investigación en la pregunta, y tal vez una explicación de por qué no ayudó.