${#1}
é o comprimento (em número de caracteres) de $1
, que é o primeiro argumento para a função.
Portanto, (( ${#1} == 0 ))
é uma maneira complicada de testar se o primeiro argumento está vazio (ou não definido, parâmetros não definidos aparecem como vazios quando expandidos) ou não.
Para testar um parâmetro vazio, a maneira canônica é:
[ -z "$1" ]
Mas, provavelmente, a intenção era verificar se um argumento foi fornecido para a função. Nesse caso, a sintaxe seria:
[ "$#" -eq 0 ]
(ou (($# == 0))
se você quiser tornar seu script ksh / bash / zsh específico).
Em ambos os casos, no entanto, as cápsulas Bourne-like têm atalhos para isso:
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
Agora, se a intenção é passar para cat
ou outro utilitário de texto para que -
(significando stdin) seja passado quando nenhum argumento for fornecido, então você pode não precisar de nada disso.
Em vez de:
getlable() {
test=${1--}
cat -- "$test"
}
Basta fazer:
getlable() {
cat -- "$@"
}
A lista de argumentos para a função será passada como é para cat
. Se não houver argumento, cat
não receberá nenhum argumento (e depois lerá de stdin como se tivesse sido um único argumento -
). E se houver um ou mais argumentos, eles serão passados como estão para cat
.