Apenas imaginando: você se incomodou em colocar uma echo ${#1}declaração antes dessa para ver qual é o valor? Nesse caso, você deve geralmente incluir o que encontrou nessa pesquisa na pergunta e talvez uma explicação de por que isso não ajudou.
Jpmc26 28/01
Respostas:
24
${#1}é o comprimento (em número de caracteres) do $1qual é o primeiro argumento para a função.
Assim, (( ${#1} == 0 ))é uma maneira complicada de testar se o primeiro argumento está vazio (ou não definido, os parâmetros não definidos aparecem como vazios quando expandidos) ou não.
Para testar um parâmetro vazio, o caminho canônico é:
[-z "$1"]
Porém, é mais provável que a intenção seja 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 específico para ksh / bash / zsh).
Em ambos os casos, no entanto, as conchas tipo Bourne 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 isso para catou outro utilitário de texto para que -(significando stdin) seja transmitido quando nenhum argumento for fornecido, talvez você não precise disso.
Ao invés de:
getlable(){
test=${1--}
cat --"$test"}
Apenas faça:
getlable(){
cat --"$@"}
A lista de argumentos para a função será passada como está cat. Se não houver argumento, catele não receberá argumento (e depois leia a partir de stdin como se tivesse sido um -argumento único ). E se houver um ou mais argumentos, todos serão passados como estão cat.
echo ${#1}
declaração antes dessa para ver qual é o valor? Nesse caso, você deve geralmente incluir o que encontrou nessa pesquisa na pergunta e talvez uma explicação de por que isso não ajudou.Respostas:
${#1}
é o comprimento (em número de caracteres) do$1
qual é o primeiro argumento para a função.Assim,
(( ${#1} == 0 ))
é uma maneira complicada de testar se o primeiro argumento está vazio (ou não definido, os parâmetros não definidos aparecem como vazios quando expandidos) ou não.Para testar um parâmetro vazio, o caminho canônico é:
Porém, é mais provável que a intenção seja verificar se um argumento foi fornecido para a função. Nesse caso, a sintaxe seria:
(ou
(($# == 0))
se você quiser tornar seu script específico para ksh / bash / zsh).Em ambos os casos, no entanto, as conchas tipo Bourne têm atalhos para isso:
Agora, se a intenção é passar isso para
cat
ou outro utilitário de texto para que-
(significando stdin) seja transmitido quando nenhum argumento for fornecido, talvez você não precise disso.Ao invés de:
Apenas faça:
A lista de argumentos para a função será passada como está
cat
. Se não houver argumento,cat
ele não receberá argumento (e depois leia a partir de stdin como se tivesse sido um-
argumento único ). E se houver um ou mais argumentos, todos serão passados como estãocat
.fonte
${#1}
é o comprimento do primeiro parâmetro posicional.Em um shell em execução, você pode usar
para configurá-los.
fonte