Saya melihat ke kode yang ditampilkan di bawah dan memeriksa input jika argumen baris / kolom dimulai dengan salah satu -r
atau -c
. Apa ${1:0:2}
artinya dalam konteks ini?
rowArgName="-r"
colArgName="-c"
if [ "${1:0:2}" != $rowArgName ] && [ "${1:0:2}" != $colArgName ]
then
echo $correctCmdMsg >&2
exit 1
fi
bash
shell-script
pengguna165213
sumber
sumber
bash
.getopt
ataugetopts
membuat hidup Anda lebih mudah (atau kehidupan siapa pun yang melakukan ini).Jawaban:
Ini adalah pola Substring Expansion (subclass of Parameter Expansion) shell.
Formatnya adalah:
dan pengindeksan dimulai pada 0.
Katakanlah, Anda memiliki variabel
foo
, lalu${foo:0:2}
menghasilkan dua karakter pertama (dari posisi 0 2 berikutnya).Contoh:
Dalam kasus Anda, angka pertama
1
,, merujuk ke nama variabel$1
, yang merupakan argumen pertama yang dikirimkan melalui baris perintah (dalam program utama) atau argumen pertama yang dilewatkan ke fungsi.Jadi dalam kasus Anda,
"${1:0:2}"
akan:mulai mengekstraksi substring mulai dari indeks 0 yaitu karakter pertama
dan lanjutkan ke dua karakter berikutnya
jadi setelah operasi Anda akan mendapatkan dua karakter pertama (diindeks pada 0 dan 1) dari string input.
The
[ "${1:0:2}" != $rowArgName ]
dan[ "${1:0:2}" != $colArgName ]
sedang memeriksa apakah subtring output sama dengan beberapa string lainnya.sumber
-c
atau tidak-r
, yang mungkin lebih baik telah diterapkan dengangetopts
Ekstrak kecil dari
man bash
:sumber
Ini adalah ekstraksi substring sederhana dari suatu variabel. Variabel yang dimaksud adalah parameter pertama ke skrip (yang
1
).Jika saya memiliki variabel, FOO, saya dapat melihat dua karakter pertama nilainya
${FOO:0:2}
. Hal yang sama sedang dilakukan dalam contoh Anda dengan argumen pertama.sumber