Trong trường hợp cụ thể này, lưu ý rằng bash có một biến gọi là PWD
chứa thư mục hiện tại: $PWD
tương đương với `pwd`
. (Vì vậy, làm vỏ khác, đây là một standard feature.) Vì vậy, bạn có thể viết kịch bản của bạn như thế này:
#!/bin/bash
until [ "$PWD" = "/" ]; do
echo "$PWD"
ls && cd .. && ls
done
Lưu ý việc sử dụng dấu ngoặc kép quanh tài liệu tham khảo khác nhau. Chúng là cần thiết nếu biến (ở đây, thư mục hiện tại) chứa khoảng trống hoặc ký tự đại diện (\[?*
), bởi vì trình bao chia tách kết quả của các mở rộng biến thành các từ và thực hiện các cụm từ này. Luôn báo giá mở rộng biến số "$foo"
và thay thế lệnh "$(foo)"
(trừ khi bạn biết rõ mình không phải).
Trong trường hợp chung, như câu trả lời khác đã đề cập đã:
- Bạn không thể sử dụng khoảng trắng xung quanh dấu bằng trong chuyển nhượng:
var=value
, không
var = value
- Các
$
có nghĩa là “mất giá trị của biến này ", vì vậy bạn không sử dụng nó khi chỉ định: var=value
, không phải
$var=value
.
Bạn cũng có thể thêm lối thoát hiểm vào vòng lặp của mình trong trường hợp xảy ra sự cố. ví dụ. 'i = 0' nằm trong vòng lặp. sau đó bên trong, 'i = $ i + 1'. Và sau đó cũng bên trong vòng lặp, thêm một cái gì đó như 'nếu [$ i> 25] sau đó; phá vỡ; endif; 'Tôi không chắc chắn về cú pháp phá vỡ vòng lặp trong các kịch bản lệnh shell, nhưng nó phải giống như thế. –