Menggunakan GNU bash (versi 4.0.35 (1) -release (x86_64-suse-linux-gnu), saya ingin meniadakan tes dengan Ekspresi Reguler. Sebagai contoh, saya ingin menambahkan path ke variabel PATH secara kondisional, jika path belum ada, seperti pada:
TEMP=/mnt/silo/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if [[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH; else PATH=$PATH:$TEMP; fi
export PATH
Saya yakin ada sejuta cara untuk melakukan ini, tetapi yang ingin saya ketahui adalah jika kondisional dapat dinegasikan, seperti dalam (yang keliru):
TEMP=/mnt/silo/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/Scripts:
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
TEMP=/mnt/silo/local/bin
if ![[ ${PATH} =~ ${TEMP} ]] ; then PATH=$PATH:$TEMP; fi
export PATH
regex
bash
conditional
negate
David Rogers
sumber
sumber
Anda juga dapat menempatkan tanda seru di dalam tanda kurung:
tetapi Anda harus jangkar pola Anda untuk mengurangi positif palsu:
yang mencari kecocokan di awal atau akhir dengan titik dua sebelum atau sesudahnya (atau keduanya). Saya sarankan menggunakan nama variabel huruf kecil atau campuran sebagai kebiasaan untuk mengurangi kemungkinan tabrakan nama dengan variabel shell.
sumber
$
sehingga tidak ada alasan untuk huruf besar untuk membuatnya menonjol.if [[ ! $foo =~ bar ]]
lebih aman daripadaif ! [[ $foo =~ bar ]]
, karena membuat lebih mudah untuk memperkenalkan lebih banyak kondisi keif
cara paling aman adalah dengan meletakkan! untuk negasi regex dalam
[[ ]]
seperti ini:kalau tidak, mungkin gagal pada sistem tertentu.
sumber
Ya, Anda dapat meniadakan tes karena SiegeX telah menunjukkan.
Namun Anda tidak boleh menggunakan ekspresi reguler untuk ini - ini bisa gagal jika jalur Anda berisi karakter khusus. Coba ini sebagai gantinya:
(Sumber)
sumber
Saya suka menyederhanakan kode tanpa menggunakan operator kondisional dalam kasus seperti ini:
sumber