Rumah > Artikel > Tutorial sistem > Bagaimana untuk membezakan antara $() dan ${} dan $(()) dan (()) dalam bash shell
Dalam shell bash, $( ) dan `` (backticks) digunakan untuk penggantian arahan. Dan $() boleh digunakan dalam setiap shell Jika anda menggunakan bash2, ia tidak akan menjadi masalah...
Lihat ${ }...ia sebenarnya digunakan untuk penggantian pembolehubah. Secara umum, tiada perbezaan antara $var dan ${var}. Tetapi menggunakan ${ } akan mentakrifkan skop nama pembolehubah dengan lebih tepat.
Saya akan menggunakan beberapa contoh untuk menggambarkan beberapa fungsi khas ${ }:
Katakan kita mentakrifkan pembolehubah sebagai:
fail=/dir1/dir2/dir3/my.file.txt
Kita boleh menggunakan ${ } untuk menggantikan setiap satu untuk mendapatkan nilai yang berbeza:
${file#*/}: Keluarkan rentetan pertama / dan rentetan ke kiri: dir1/dir2/dir3/my.file.txt
${file##*/}: Alih keluar yang terakhir / dan rentetan ke kiri: my.file.txt
${file#*.}: Keluarkan yang pertama dan rentetan ke kiri: file.txt
${file##*.}: Keluarkan yang terakhir dan rentetan ke kiri: txt
${file%/*}: Keluarkan yang terakhir / dan rentetan di sebelah kanan: /dir1/dir2/dir3
${file%%/*}: Keluarkan yang pertama / dan rentetan di sebelah kanan: (nilai nol)
${file%.*}: Alih keluar . yang terakhir dan rentetan di sebelah kanan: /dir1/dir2/dir3/my.file
${file%%.*}: Alih keluar . pertama dan rentetan di sebelah kanan: /dir1/dir2/dir3/my
# ialah untuk mengeluarkan bahagian kiri (# adalah di sebelah kiri $ pada plat penilaian)
% bermaksud mengalih keluar bahagian kanan (% berada di sebelah kanan $ pada papan)
Simbol tunggal ialah padanan minimum; dua simbol ialah padanan maksimum.
${file:0:5}: Ekstrak 5 bait paling kiri: /dir1
${file:5:5}: Ekstrak 5 bait berturut-turut di sebelah kanan bait ke-5: /dir2
Kita juga boleh menggantikan rentetan dalam nilai berubah:
${file/dir/path}: Gantikan dir pertama dengan laluan:/
path1/dir2/dir3/my.file.txt
${file//dir/path}: Gantikan semua dir dengan laluan:/
path1/path2/path3/my.file.txt
Menggunakan ${ } juga boleh menetapkan nilai kepada keadaan pembolehubah yang berbeza (tidak ditetapkan, nilai nol, nilai bukan nol):
${file-my.file.txt}: Jika $file tidak ditetapkan, gunakan my.file.txt sebagai nilai pulangan. (Nilai null dan non-null tidak akan diproses)
${file:-my.file.txt}: Jika $file tidak ditetapkan atau kosong, gunakan my.file.txt sebagai nilai pulangan. (Nilai bukan nol tidak akan diproses)
${file+my.file.txt}: Jika $file ditetapkan kepada nilai null atau nilai bukan null, my.file.txt akan digunakan sebagai nilai pulangan. (Tiada pemprosesan akan dilakukan jika tidak ditetapkan)
${file:+my.file.txt}: Jika $file ialah nilai bukan nol, gunakan my.file.txt sebagai nilai pulangan. (Tiada pemprosesan akan dilakukan jika tiada tetapan atau nilai kosong)
${file=my.file.txt}: Jika $file tidak ditetapkan, gunakan my.file.txt sebagai nilai pulangan dan tetapkan $file kepada my.file.txt. (Nilai null dan non-null tidak akan diproses)
${file:=my.file.txt}: Jika $file tidak ditetapkan atau kosong, gunakan my.file.txt sebagai nilai pulangan dan tetapkan $file kepada my.file.txt. (Nilai bukan nol tidak akan diproses)
${file?my.file.txt}: Jika $file tidak ditetapkan, keluarkan my.file.txt kepada STDERR. (Nilai null dan non-null tidak akan diproses)
${file:?my.file.txt}: Jika $file tidak ditetapkan atau kosong, keluarkan my.file.txt kepada STDERR. (Nilai bukan nol tidak akan diproses)
Pemahaman di atas ialah anda mesti membezakan dengan jelas tiga keadaan tugasan iaitu tidak ditetapkan, batal dan tidak batal.
Secara umumnya, : berkaitan dengan null Jika tidak mengandungi :, null tidak akan terjejas Jika mengandungi :, null juga akan terjejas
Selain itu, ${#var} boleh mengira panjang nilai pembolehubah:${#file} mendapat 27 kerana /dir1/dir2/dir3/my.file.txt adalah tepat 27 bait...
Ia digunakan untuk operasi integer.
Dalam bash, simbol aritmetik integer $(( )) adalah kira-kira seperti berikut:
+ - * /: "Tambahan, tolak, darab, bahagi" masing-masing.
%: Baki operasi
& |. ^ !: operasi "DAN, ATAU, XOR, BUKAN".
Contoh:
wangnc>a=5;b=7;c=2;
wangnc>gema $a + $b
5 + 7
wangnc>echo $(( a + b*c))
19
wangnc>echo $(((a*b)/c))
17
wangnc>echo $(($a +$b*$c))
19
wangnc>
Nama pembolehubah dalam $(( )) boleh digantikan dengan menambahkan simbol $ di hadapannya, atau ia boleh diganti tanpanya, seperti:
$(( $a + $b * $c)) juga boleh dapat keputusan 19
Selain itu, $(( )) juga boleh melakukan operasi dengan nombor bawaan yang berbeza (seperti perduaan, perlapanan dan perenambelasan), tetapi hasil keluarannya semuanya perpuluhan:
echo $((16#2a)) Hasilnya ialah 42 (heksadesimal hingga perpuluhan)
(()) Tujuan:
Malah, hanya menggunakan (( )) juga boleh mentakrifkan semula nilai pembolehubah, atau melakukan ujian:
a=5; ((a++)) mentakrifkan semula $a kepada 6
a=5; ((a--)) kemudian a=4
a=5; b=7; ((a < b)) akan mengembalikan 0 (benar).
Simbol ujian biasa untuk (( )) adalah seperti berikut:
<: kurang daripada >: lebih besar daripada
<=: kurang daripada atau sama dengan >=: lebih besar daripada atau sama dengan
==: sama dengan
!=: Tidak sama dengan
Atas ialah kandungan terperinci Bagaimana untuk membezakan antara $() dan ${} dan $(()) dan (()) dalam bash shell. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!