Saya menulis perintah berikut untuk mencocokkan $ a dengan $ b, tetapi ketika nilainya termasuk "-", maka saya mendapatkan kesalahan. Bagaimana saya bisa menghindarinya?
# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
# echo "$a" | grep -Fxc "$b"
grep: conflicting matchers specified
grep
special-characters
yael
sumber
sumber
grep -Fxc -- "$b" <<< "$a"
untuk menghindari pipa yang tidak perlu[[ ... ]]
ataucase
akan menjadi pilihan yang lebih baik, karena Anda menghindari kedua kekhasanecho
dan proses anak.grep
sebagai karakter literal daripada awal opsi, yaituecho test-test | grep "\-test"
akan cocok daripada mengeluh tentang-t
bendera yang tidak dikenal .Jawaban:
Tempatkan
--
sebelum pola Anda:--
menentukan opsi opsi akhir untuk banyak perintah / built-in shell, setelah argumen yang tersisa diperlakukan sebagai argumen posisi.sumber
Selain jawaban hebat @ sebasth , Anda bisa memberi tahu POLA itu dengan
grep's -e
opsi untuk menggunakan POLA sebagai pola (di sini menggunakan<<<
zsh
operator di sini-string alih-alihecho
; lihat jugaprintf '%s\n' "$a"
untuk portabilitas).Atau semua selain opsi lain.
Karena tujuan Anda adalah perbandingan kesetaraan string byte-ke-byte, gunakan
[
perintah sebagai gantinya.Atau jika
$a
mengandung$b
, menggunakan[[...]]
konstruk ksh:Atau lebih mudah dibawa dalam semua cangkang mirip Bourne:
sumber
==
bukan standar untuk[
perintah; itu bashism . Gunakan=
sebagai gantinya.