Risposte:
${#1}è la lunghezza (in numero di caratteri) di $1cui è il primo argomento della funzione.
Quindi (( ${#1} == 0 ))è un modo contorto per verificare se il primo argomento è vuoto (o non impostato, i parametri non impostati appaiono vuoti quando vengono espansi) oppure no.
Per verificare un parametro vuoto, il modo canonico è:
[ -z "$1" ]
Ma lì, più probabilmente l'intento era di verificare se fosse stato fornito un argomento alla funzione, nel qual caso la sintassi sarebbe:
[ "$#" -eq 0 ]
(o (($# == 0))se vuoi rendere specifico il tuo script ksh / bash / zsh).
In entrambi i casi, tuttavia, le conchiglie simili a Bourne hanno scorciatoie per questo:
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
Ora, se l'intenzione è quella di passare quella cato altra utilità di testo in modo che -(significato stdin) venga passato quando non viene fornito alcun argomento, allora potrebbe non essere necessario nulla di tutto ciò.
Invece di:
getlable() {
test=${1--}
cat -- "$test"
}
Basta fare:
getlable() {
cat -- "$@"
}
L'elenco degli argomenti della funzione verrà passato così com'è cat. Se non c'è nessun argomento, catnon riceverà alcun argomento (e quindi letto da stdin come se fosse stato un singolo -argomento). E se ci sono uno o più argomenti, tutti verranno passati così come sono cat.
${#1} è la lunghezza del primo parametro posizionale.
In una shell in esecuzione puoi usare
set -- foo bar
echo ${#1}
3
per impostarli.
echo ${#1}un'affermazione prima di vedere qual è il valore? In tal caso, dovresti generalmente includere nella domanda ciò che hai trovato in quella ricerca e forse una spiegazione del perché non ha aiutato.