Saya sudah mencoba mencari tahu apa yang salah dengan ini tetapi tidak bisa mengetahuinya ..
Ini bagian yang sepertinya mendapat error ..
elif [ $operation = "man" ]; then
if [ $aug1 = "add" ]; then # <- Line 75
echo "Man Page for: add"
echo ""
echo "Syntax: add [number 1] [number 2]"
echo ""
echo "Description:"
echo "Add two different numbers together."
echo ""
echo "Info:"
echo "Added in v1.0"
echo ""
elif [ -z $aug1 ]; then
echo "Please specify a command to read the man page."
else
echo "There is no manual page for that command."
fi
Saya mendapatkan kesalahan ini:
calc_1.2: line 75: [: =: unary operator expected
if
pernyataan Anda pada saluran 75 perlu afi
.Jawaban:
Jika Anda tahu Anda akan selalu menggunakan bash, jauh lebih mudah untuk selalu menggunakan perintah compound conditional double bracket
[[ ... ]]
, daripada versi braket tunggal yang kompatibel dengan Posix[ ... ]
. Di dalam[[ ... ]]
kata majemuk, pemisahan kata dan perluasan nama path tidak diterapkan pada kata-kata, jadi Anda bisa mengandalkannyauntuk membandingkan nilai
$aug1
dengan stringand
.Jika Anda menggunakan
[ ... ]
, Anda harus selalu ingat untuk menggandakan variabel kutipan seperti ini:Jika Anda tidak mengutip ekspansi variabel dan variabel tidak terdefinisi atau kosong, variabel akan menghilang dari lokasi kejahatan, hanya menyisakan
yang bukan sintaks yang valid. (Itu juga akan gagal dengan pesan kesalahan yang berbeda jika
$aug1
termasuk spasi putih atau karakter meta shell.)[[
Operator modern memiliki banyak fitur bagus lainnya, termasuk pencocokan ekspresi reguler.sumber
Butuh waktu beberapa saat untuk menemukan ini tetapi perhatikan bahwa jika Anda memiliki kesalahan spasi Anda juga akan mendapatkan kesalahan yang sama:
Benar:
vs.
Seperti biasa mengatur
-x
variabel debug membantu menemukan ini:sumber
Coba tetapkan nilai
$aug1
sebelum menggunakannya dalamif[]
laporan; pesan kesalahan akan hilang setelahnya.sumber
Kamu bilang ... :
Saya pikir ini hanya ruang ... lakukan seperti ini:
sumber
Anda juga dapat menetapkan nilai default untuk variabel, jadi Anda tidak perlu menggunakan dua "[", yang berarti dua proses ("[" sebenarnya adalah sebuah program) alih-alih satu.
Itu berjalan dengan sintaks ini: $ {VARIABLE: -default}.
Semuanya harus dipikirkan sedemikian rupa sehingga nilai "default" ini adalah sesuatu yang berbeda dari nilai / konten "valid".
Jika itu tidak mungkin karena alasan tertentu Anda mungkin perlu menambahkan langkah seperti memeriksa apakah ada nilai sama sekali, di sepanjang baris "jika [-z $ VARIABEL]; kemudian gema" variabel perlu diisi "", atau " jika [! -z $ VARIABLE]; maka # semuanya baik-baik saja, lanjutkan dengan sisa skrip ".
sumber
[[
tidak memunculkan dua proses, itu adalah builtin shell (dan[
juga Bash builtin).[[
berbeda dari[ [
, yang memperlakukan yang kedua[
sebagai string