Rumah  >  Artikel  >  Tutorial sistem  >  Bagaimana untuk membezakan antara $() dan ${} dan $(()) dan (()) dalam bash shell

Bagaimana untuk membezakan antara $() dan ${} dan $(()) dan (()) dalam bash shell

王林
王林ke hadapan
2024-02-15 10:40:25933semak imbas

bash shell 中如何区别 $()和${}和$(())和(())

Penggunaan $() dan ${}:

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

Kaedah ingatan ialah:

# 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...

$(()) Tujuan:

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!

Kenyataan:
Artikel ini dikembalikan pada:linuxprobe.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam