Apa yang dilakukan operator '#' di depan variabel dalam ekspansi variabel?

12

di bawah ini adalah kode yang saya jalankan di terminal

[root@idm ~]# x="$(date +%d%m%y)"    
[root@idm ~]# echo $x
270217
[root@idm ~]# echo ${#x}
6

Dapatkah seseorang membantu saya memahami mengapa outputnya 6? Apa yang #dasarnya dilakukan terhadap variabel?

Girish Sunkara
sumber

Jawaban:

25

Ini adalah ekspansi parameter yang mengembalikan panjang parameter, atau jumlah elemen dalam array, atau jumlah parameter posisi.

Silakan baca manual shell Anda. Berikut ini dari bashmanual:

${#parameter}

Panjang karakter nilai parameterdiganti . Jika parameteradalah *atau @, nilai diganti adalah jumlah parameter posisi. Jika parameteradalah nama array yang disubkripsikan oleh *atau @, nilai yang diganti adalah jumlah elemen dalam array. Jika parameteradalah nama array yang diindeks disandikan oleh angka negatif, angka itu ditafsirkan relatif terhadap satu yang lebih besar dari indeks maksimum parameter, sehingga indeks negatif menghitung mundur dari akhir array, dan indeks -1 merujuk elemen terakhir .


Dan juga, tolong jangan biasakan bekerja di shell root interaktif. Ini berbahaya dan ceroboh. Gunakan sudohemat dan hanya dalam situasi yang membutuhkan hak istimewa yang tinggi. Bermain-main dengan bashsesuatu adalah sesuatu yang pasti dapat Anda lakukan sebagai pengguna non-root biasa.

Dalam beberapa tahun terakhir, saya hanya menggunakan shell root interaktif untuk secara manual menambahkan satu pengguna untuk saya sendiri. Ini adalah pekerjaan 2 menit dan kemudian saya tidak perlu lagi melihat #prompt di mesin itu.

Kusalananda
sumber
13

The #Operator mengembalikan panjang variabel. Dalam kasus Anda, xpanjang variabel adalah enam.

Silakan lihat Substitusi Parameter untuk informasi lebih lanjut.

cerberus
sumber