Ketika %
digunakan dalam pola ${variable%substring}
itu akan mengembalikan konten variable
dengan kejadian terpendek substring
dihapus dari belakang variable
.
Fungsi ini mendukung pola karakter pengganti - itulah sebabnya ia menerima bintang (tanda bintang) sebagai pengganti nol atau lebih karakter.
Harus disebutkan bahwa ini khusus untuk Bash - shell linux lain tidak harus berisi fungsi ini.
Jika Anda ingin mempelajari lebih lanjut tentang manipulasi string di Bash, saya sangat menyarankan untuk membaca halaman ini. Di antara fungsi praktis lainnya - misalnya - menjelaskan apa yang dimaksud dengan %%
lakukan :)
Sunting:Saya lupa menyebutkannya ketika digunakan dalam pola $((variable%number))
atau $((variable1%$variable2))
%
karakter akan berfungsi sebagai operator modulo. DavidPostill memiliki tautan dokumentasi yang lebih spesifik dalam jawabannya.
Ketika %
digunakan dalam konteks yang berbeda, harus dikenali sebagai karakter biasa saja.
Manual Referensi Bash:Ekspansi Parameter Shell
${parameter%word}
${parameter%%word}
Kata diperluas untuk menghasilkan pola seperti pada perluasan nama file. Jika pola cocok dengan bagian batas dari nilai parameter yang diperluas , maka hasil dari perluasan tersebut adalah nilai dari parameter dengan pola pencocokan terpendek (
‘%’
case) atau pola pencocokan terpanjang (‘%%’
kasus) dihapus. Jika parameter adalah‘@’
atau‘*’,
operasi penghapusan pola diterapkan ke setiap parameter posisi pada gilirannya, dan perluasan adalah daftar yang dihasilkan. Jika parameter adalah variabel array yang disubskrip dengan‘@’
atau‘*’,
operasi penghapusan pola diterapkan ke setiap anggota array secara bergantian, dan perluasan adalah daftar yang dihasilkan.
Dengan bereksperimen, saya menemukan bahwa kecocokan setelah % dibuang, saat string diapit oleh kurung kurawal (kurung kurawal).
Sebagai ilustrasi:
touch abcd # Create file abcd
for file in ab*; do
echo $file # echoes the filename
echo $file% # echoes the filename plus "%"
echo ${file%} # echoes the filename
echo "${file%}" # echoes the filename
echo
echo "${file%c*}" # Discard anything after % matching c*
echo "${file%*}" # * is not greedy
echo ${file%c*} # Without quotes works too
echo "${file%c}" # No match after %, no effect
echo $file%c* # Without {} fails
done
Inilah hasilnya:
abcd
abcd%
abcd
abcd
ab
abcd
ab
abcd
abcd%c*