Điểm:0

Tập lệnh chạy tiếng vang bình thường, nhưng không in gì cho tiếng vang lặp

lá cờ cn

Tôi đang cố gắng viết một tập lệnh mở một thiết bị đầu cuối và lặp lại tiếng vang trong đó. Tôi có những điều sau đây.

#!/usr/bin/bash

gnome-terminal -- /bin/bash -c "cho tôi trong 1 2 3; do echo $i; done; exec bash"

Khi tôi chạy tập lệnh này, nó hiển thị ba dòng trống và sau đó thực thi lệnh bash. Tuy nhiên, nếu tôi chạy cho tôi trong 1 2 3; lặp lại $i; xong; điều hành bash trong một thiết bị đầu cuối nó in bình thường. Ngoài ra, nếu tôi viết như sau, nó cũng in xin chào bình thường. Do đó, tôi tin rằng đó là sự cố với vòng lặp for.

#!/usr/bin/bash

gnome-terminal -- /bin/bash -c "echo xin chào"

Tôi không thể tìm thấy ai có vấn đề tương tự.

lá cờ cn
Ray
Tại sao bạn có `exec bash` ở cuối? Tôi không chắc liệu bạn có muốn chạy một vòng lặp trong bash và sau đó bắt đầu một bash shell khác hay không... Thật vậy, có gì đó không ổn với mã của bạn, nhưng tôi không thể đặt ngón tay vào đó... Bạn đang nhận được 3 dòng trống vì đó là giá trị của `$i`. Giả sử, nếu bạn đặt `i=10` và sau đó chạy vòng lặp, tôi nghĩ bạn sẽ nhận được ba `10` được in ra.
bac0n avatar
lá cờ cn
bạn cần dấu ngoặc đơn hoặc `$i` sẽ đánh giá, do đó ... dòng trống
matticebox avatar
lá cờ cn
@Ray Tôi có `exec bash` ở cuối để tôi có thể nhìn vào thiết bị đầu cuối sau khi nó lặp lại tiếng vang. Tôi đã sử dụng chế độ ngủ trước đây, nhưng tôi nghĩ rằng việc bắt đầu một bash shell khác sẽ dễ dàng hơn. Tôi là một người mới và không thực sự hiểu ý của bạn khi nói `i=10`, nhưng nếu tôi đặt `10` thay cho `$i` thì nó thực sự in ra `10` ba lần. Điều đó không hợp lý với tôi bởi vì khi tôi chạy mã với `$i` trong một thiết bị đầu cuối, nó sẽ in ra `1`, rồi `2`, rồi `3`. Ví dụ: `cho tôi trong lời chào; lặp lại $i; done` sẽ in `hello` trong terminal.
matticebox avatar
lá cờ cn
@bac0n Tôi đã thử `gnome-terminal -- /bin/bash -c "for i in 1 2 3; do echo '$i'; done; exec bash"` và nó vẫn hiển thị các dòng trống, trừ khi tôi không để ý một cái gì đó khác tôi đã làm sai.
bac0n avatar
lá cờ cn
không, `/bin/bash -c 'cho tôi trong 1 2 3; lặp lại $i; xong; exec bash'`
matticebox avatar
lá cờ cn
@bac0n Đã thành công, cảm ơn. Nhưng tôi không hiểu chính xác chuyện gì đang xảy ra... Tôi nghĩ việc sử dụng dấu ngoặc kép và dấu ngoặc đơn chỉ để bạn có thể đặt cái này bên trong cái kia.
Artur Meinild avatar
lá cờ vn
[Xem tại đây](https://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.