"STR: Command not found" saat memberikan nilai ke variabel

9

Saya memasukkan baris berikut ke dalam skrip shell yang disebut "test.sh":

#!/bin/bash
echo Hello World
STR=”Hello Again
echo $STR

Setelah chmod ke executable, saya menjalankan skrip dengan ./test.sh. Namun, saya menerima pesan itu

./test.sh: line 3  STR: Command not found

Apa yang saya lakukan salah?

Jay Silver
sumber
1
Apakah jawaban terdon menyelesaikan pertanyaan Anda? Jika tidak, bisa jadi Anda secara tidak sengaja memiliki ruang di sekitar tugas variabel Anda.
Arronical
@Voker hanya komentar gaya berdasarkan saran saya : Saya pikir yang terbaik adalah menggunakan Blockquote untuk pesan kesalahan daripada blok Kode; pada akhirnya, ini bukan kode tetapi beberapa teks penerjemah Bash kembali.
fedorqui
@ fedorqui mengapa? Kutipan blok tidak mempertahankan format, mereka menafsirkan karakter khusus (misalnya *, _, #) sebagai penurunan harga, dan diberikan secara berbeda oleh perangkat lunak pembaca layar. Saya pikir segala sesuatu yang diberikan atau diterima oleh komputer harus dalam blok kode. Anda tidak pernah tahu kapan format yang tepat bisa relevan. Terutama ketika berhadapan dengan hal-hal seperti ini di mana unicode ikut bermain.
terdon 6-16
@terdon itu benar-benar tergantung pada kasus dan bahkan ada permintaan untuk menambahkan format untuk log / peringatan / pesan kesalahan yang memungkinkan pembungkus kata dan mempertahankan baris baru . Bagi saya, jika hanya berupa garis seperti ini, saya lebih suka blok kutipan karena membuatnya lebih mudah untuk memahami apa itu kode dan apa itu kesalahan.
fedorqui
@ fedorqui Saya kira kita harus membawanya ke meta tapi saya selalu lebih suka font dengan lebar tetap dan reproduksi format yang tepat setiap kali memposting pesan yang dibaca atau diproduksi oleh komputer.
terdon

Jawaban:

20

Apa yang Anda gunakan untuk membuat skrip itu? Karakter kutipan yang Anda miliki dalam pertanyaan Anda salah. Itu bukan tanda kutip ganda reguler ( ") tetapi . Kutipan reguler adalah:

$ uniprops '"' | head -1
U+0022 "› \N{QUOTATION MARK}

Sedangkan milik Anda adalah:

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

Jadi, cukup gunakan kutipan biasa dan Anda akan baik-baik saja:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
terdon
sumber
Terima kasih atas jawaban Terdon. Kutipan ganda dalam file sudah benar, Posting itu dari email.
Jay Silver
1
unipropsterlihat keren. Saya menemukan halaman (apakah itu tchrist kita sendiri?). Apakah saya harus mengunduhnya dari sumber, atau apakah tersedia di pengelola paket di suatu tempat? E: Unable to locate package uniprops
TRiG
1
Saya tidak banyak menggunakan Perl (nyaris tidak sama sekali). Saya hanya ingin tahu lebih dari minimum tentang Unicode.
TRiG
1
@TRiG dengan baik, di Ubuntu, sesederhana sudo apt-get install cpanminus; sudo cpanm Unicode::Tussledan kemudian Anda memiliki unipropsperintah. Tentu saja, tchrist menulis hal sialan itu sehingga Anda sebaiknya bertanya kepadanya dalam obrolan :)
terdon
1
Saya menyesal mengalami omong kosong semacam ini sepanjang waktu. Sistem wiki tertentu di perusahaan saya tampaknya memiliki kebiasaan yang buruk dalam menerjemahkan tanda hubung minus -U + 002D menjadi tanda hubung U + 2010 ( atau serupa ). Maka hal-hal seperti uname ‐aberhenti bekerja: - /. Klien email sering memiliki kebiasaan jahat yang serupa - terutama ketika menggunakan format HTML - alasan lain yang baik untuk memilih email teks biasa.
Digital Trauma