Jawaban:
${#1}adalah panjang (dalam jumlah karakter) $1yang merupakan argumen pertama ke fungsi.
Jadi (( ${#1} == 0 ))adalah cara berbelit-belit untuk menguji apakah argumen pertama kosong (atau tidak disetel, parameter tidak disetel tampak kosong ketika diperluas) atau tidak.
Untuk menguji parameter kosong, cara kanonik adalah:
[ -z "$1" ]
Tetapi di sana, lebih mungkin maksudnya adalah untuk memeriksa apakah argumen disediakan untuk fungsi dalam hal ini sintaksinya adalah:
[ "$#" -eq 0 ]
(atau (($# == 0))jika Anda ingin membuat skrip Anda khusus ksh / bash / zsh).
Namun dalam kedua kasus, cangkang Bourne-like memiliki jalan pintas untuk itu:
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
Sekarang, jika maksudnya adalah meneruskannya ke catatau utilitas teks lain sehingga -(yang berarti stdin) diteruskan ketika tidak ada argumen yang diberikan, maka Anda mungkin tidak memerlukan semua itu sama sekali.
Dari pada:
getlable() {
test=${1--}
cat -- "$test"
}
Kerjakan saja:
getlable() {
cat -- "$@"
}
Daftar argumen ke fungsi akan diteruskan apa adanya ke cat. Jika tidak ada argumen, tidak catakan menerima argumen (dan kemudian membaca dari stdin seolah-olah itu -argumen tunggal ). Dan jika ada satu atau lebih argumen mereka semua akan lulus apa adanya cat.
${#1} adalah panjang dari parameter posisi pertama.
Dalam shell yang berjalan Anda dapat menggunakan
set -- foo bar
echo ${#1}
3
untuk mengaturnya.
echo ${#1}sebelum pernyataan itu untuk melihat nilainya? Jika demikian, Anda umumnya harus memasukkan apa yang Anda temukan dalam penelitian itu dalam pertanyaan, dan mungkin penjelasan mengapa itu tidak membantu.