Bagaimana cara membandingkan dua string variabel dalam 'jika' pernyataan di Bash?
I'm berusaha untuk mendapatkan sebuah jika
pernyataan untuk bekerja di Bash (menggunakan Ubuntu):
#!/bin/bash
s1="hi"
s2="hi"
if ["$s1" == "$s2"]
then
echo match
fi
I've mencoba berbagai bentuk jika
pernyataan, menggunakan [["$s1" == "$s2"]]
, dengan dan tanpa tanda kutip, menggunakan =
, ==
dan eq
, tapi saya masih mendapatkan error berikut:
[hi: perintah tidak ditemukan
I've melihat di berbagai situs dan tutorial dan disalin mereka, tapi itu doesn't bekerja - apa yang saya lakukan salah?
Akhirnya, saya ingin mengatakan jika $s1
berisi $s2
, jadi bagaimana saya bisa melakukan itu?
Saya tidak hanya bekerja di luar ruang sedikit.. :/ Bagaimana cara mengucapkan berisi?
Aku mencoba
if [[ "$s1" == "*$s2*" ]]
tapi itu tidak't bekerja.
568
12
Untuk perbandingan string, gunakan:
Untuk
a
berisib
, gunakan:(dan pastikan untuk menambahkan spasi di antara simbol-simbol):
buruk:
baik:
Anda membutuhkan ruang:
Anda harus berhati-hati untuk meninggalkan ruang antara tanda '[' dan tanda kutip ganda di mana variabel ini berisi:
The
^
s menunjukkan ruang kosong yang anda butuhkan untuk pergi.Saya sarankan yang satu ini:
Melihat ruang putih antara pembukaan/penutupan kurung dan variabel-variabel dan juga ruang putih pembungkus '=' tanda.
Juga, berhati-hati dari anda script header. It's tidak sama hal apakah yang anda gunakan
atau
Di sini's sumber.
Saya akan menyarankan:
Tanpa tanda kutip ganda dan dengan hanya satu sama dengan.
Bash4+ contoh. Catatan: tidak menggunakan tanda kutip akan menyebabkan masalah ketika kata-kata yang mengandung spasi dll.. Selalu kutipan di bash IMO.
Berikut ini adalah beberapa contoh BASH4+ :
Contoh 1, memeriksa 'ya' di string (tidak case sensitive):
Contoh 2, periksa 'ya' di string (tidak case sensitive):
Contoh 3, periksa 'ya' di string (tidak case sensitive) :
Contoh 4, periksa 'ya' di string (tidak case sensitive):
Contoh 5, sama persis (case sensitive):
Contoh 6, persis (case sensitive):
Contoh 7, pencocokan tepat :
Pertanyaan ini sudah jawaban yang besar tapi di sini tampak bahwa ada sedikit kebingungan antara menggunakan sama tunggal dan ganda sama dengan di
Perbedaan utama terletak pada yang scripting bahasa yang anda gunakan. Jika anda menggunakan bash kemudian termasuk
#!/bin/bash
di awal script dan simpan script anda sebagainama berkas.bash
. Untuk mengeksekusi menggunakannama file bash.bash
- maka anda harus menggunakan==
.Jika anda menggunakan sh kemudian menggunakan
#!/bin/sh
dan simpan script anda sebagaifilename.sh
. Untuk mengeksekusi menggunakansh filename.sh
- maka anda harus menggunakan single=
. Hindari mencampurkan mereka.Saya don't memiliki akses ke kotak linux sekarang, tapi [ sebenarnya adalah suatu program (dan bash builtin), jadi saya pikir anda harus menempatkan ruang antara [ dan parameter pertama.
Juga perhatikan bahwa string kesetaraan operator tampaknya menjadi satu =
Ini adalah klarifikasi lebih lanjut dari jawaban ! Ya , petunjuk adalah dalam pesan galat:
yang menunjukkan anda bahwa anda "hi" telah digabungkan ke "[".
Tidak seperti dalam banyak bahasa pemrograman tradisional, di Bash, "[" adalah perintah seperti lebih jelas "ls" dll. - it's tidak diperlakukan khusus hanya karena itu's simbol, maka "[" dan (diganti) "$s1" yang langsung di sebelah satu sama lain dalam pertanyaan anda, bergabung (sebagai benar untuk Bash) dan kemudian mencoba untuk menemukan perintah dalam posisi itu: [hi - yang tidak diketahui untuk Bash.
Dalam C dan beberapa bahasa lain, "[" akan dilihat sebagai berbeda "kelas karakter" dan akan utma dari berikut "hi".
Oleh karena itu anda memerlukan ruang setelah pembukaan "[".
Untuk versi dengan murni Bash dan tanpa
test
, tapi benar-benar jelek, cobalah:Penjelasan: Dalam
( )
tambahan subkulit dibuka. Itu keluar dengan 0 jika ada pertandingan, dan mencoba untuk keluar dengan $s1 jika tidak ada pertandingan yang menimbulkan kesalahan (jelek). Kesalahan ini diarahkan untuk/dev/null
.Menambahkan string tambahan dalam membuatnya lebih aman.
Anda juga bisa menggunakan notasi lain untuk satu baris perintah: