STR STR: Không tìm thấy lệnh trong khi gán giá trị cho biến


9

Tôi đã nhập các dòng sau vào tập lệnh shell có tên là test.sh.

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

Sau khi chmod để thực thi, tôi chạy script với ./test.sh. Tuy nhiên, tôi nhận được tin nhắn

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

Tôi đang làm gì sai?


1
Câu trả lời của terdon có giải quyết được câu hỏi của bạn không? Nếu không, có thể là bạn vô tình có khoảng trống xung quanh bài tập biến của bạn.
Arronical

@Voker chỉ là một nhận xét phong cách dựa trên đề xuất của tôi : Tôi nghĩ tốt nhất nên sử dụng Blockquote cho các thông báo lỗi thay vì Khối mã; cuối cùng, đây không phải là mã mà là một số văn bản mà trình thông dịch Bash đang trả về.
fedorqui

@fedorqui tại sao? Trích dẫn khối không duy trì định dạng, họ giải thích ký tự đặc biệt (ví dụ như *, _, #) như markdown, và được trả lại khác nhau bằng phần mềm đọc màn hình. Tôi nghĩ rằng bất cứ thứ gì được máy tính cho hoặc nhận đều phải nằm trong khối mã. Bạn không bao giờ biết khi nào định dạng chính xác có thể có liên quan. Đặc biệt là khi xử lý những thứ như thế này, nơi unicode phát huy tác dụng.
terdon

@terdon nó thực sự phụ thuộc vào các trường hợp và thậm chí còn có yêu cầu Thêm định dạng cho nhật ký / cảnh báo / thông báo lỗi cho phép gói từ và giữ nguyên dòng mới . Đối với tôi, nếu nó chỉ là một dòng như trường hợp này, tôi thích các khối trích dẫn vì nó giúp dễ hiểu mã hơn và lỗi là gì.
fedorqui

@fedorqui Tôi đoán chúng ta nên đưa nó lên meta nhưng tôi luôn thích phông chữ có chiều rộng cố định và tái tạo định dạng chính xác mỗi khi đăng một tin nhắn được đọc hoặc sản xuất bởi máy tính.
terdon

Câu trả lời:


20

Bạn đang sử dụng gì để tạo tập lệnh đó? Các nhân vật trích dẫn bạn có trong câu hỏi của bạn là sai. Chúng không phải là dấu ngoặc kép thông thường ( ") nhưng . Các trích dẫn thường xuyên là:

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

Trong khi của bạn là:

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

Vì vậy, chỉ cần sử dụng dấu ngoặc kép thông thường và bạn sẽ ổn thôi:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well

Cảm ơn đã trả lời Terdon. Các dấu ngoặc kép trong tệp là chính xác, Bài đăng được lấy từ một email.
Jay Silver

1
unipropstrông thật hấp dẫn. Tôi tìm thấy trang này (đó có phải là tchrist của chúng ta không?). Tôi có phải tải xuống từ nguồn không, hoặc nó có sẵn trong trình quản lý gói ở đâu đó không? E: Unable to locate package uniprops
TRiG

1
Tôi không sử dụng Perl nhiều (hầu như không có). Tôi chỉ muốn biết nhiều hơn mức tối thiểu về Unicode.
TRiG

1
@TRiG tốt, trong Ubuntu, đơn giản như vậy sudo apt-get install cpanminus; sudo cpanm Unicode::Tusslevà sau đó bạn có unipropslệnh. Tất nhiên, tchrist đã viết những thứ chết tiệt đó để bạn cũng có thể hỏi anh ấy trong cuộc trò chuyện :)
terdon

1
Tôi rất tiếc chạy vào loại vô nghĩa này tất cả các thời gian. Một hệ thống wiki cụ thể tại nhà tuyển dụng của tôi dường như có thói quen khó chịu khi dịch gạch nối - trừ -U + 002D sang gạch nối U + 2010 ( hoặc tương tự ). Sau đó, những thứ như uname ‐angừng hoạt động: - /. Các ứng dụng email thường có thói quen bất chính tương tự - đặc biệt là khi sử dụng định dạng HTML - một lý do chính đáng khác để thích email văn bản đơn giản.
Chấn thương kỹ thuật số
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.