Hanya ingin tahu: apakah Anda repot-repot meletakkan 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.
jpmc26
Jawaban:
24
${#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.
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.Jawaban:
${#1}
adalah panjang (dalam jumlah karakter)$1
yang 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:
Tetapi di sana, lebih mungkin maksudnya adalah untuk memeriksa apakah argumen disediakan untuk fungsi dalam hal ini sintaksinya adalah:
(atau
(($# == 0))
jika Anda ingin membuat skrip Anda khusus ksh / bash / zsh).Namun dalam kedua kasus, cangkang Bourne-like memiliki jalan pintas untuk itu:
Sekarang, jika maksudnya adalah meneruskannya ke
cat
atau 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:
Kerjakan saja:
Daftar argumen ke fungsi akan diteruskan apa adanya ke
cat
. Jika tidak ada argumen, tidakcat
akan menerima argumen (dan kemudian membaca dari stdin seolah-olah itu-
argumen tunggal ). Dan jika ada satu atau lebih argumen mereka semua akan lulus apa adanyacat
.sumber
${#1}
adalah panjang dari parameter posisi pertama.Dalam shell yang berjalan Anda dapat menggunakan
untuk mengaturnya.
sumber