Bash: `-su: $ *: biến không liên kết` với` set -u`


8

Đây là hệ thống FreeBSD 7.x chạy GNU bash phiên bản 4.0.

Trong Bash, set -utùy chọn có thể buộc shell in lỗi nếu gặp biến không đặt, như sau:

$ set -u
$ echo $THISISUNSET
-su: THISISUNSET: unbound variable
$ echo $?
1

Tuy nhiên, tôi cũng gặp phải lỗi tương tự với $ *:

$ echo $*
-su: $*: unbound variable
$ echo $?
1
$ echo $@
-su: $@: unbound variable

Hướng dẫn Bash 4.3.1 Tập hợp dựng sẵn nói cụ thể set -ubỏ qua $ * và $ @:

-u Xử lý các biến và tham số không đặt khác với các tham số đặc biệt '@' hoặc '*' là lỗi khi thực hiện mở rộng tham số. Một thông báo lỗi sẽ được ghi vào lỗi tiêu chuẩn và một vỏ không tương tác sẽ thoát.

Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


11

Đây là một lỗi trong các phiên bản cũ hơn của bash, cụ thể là 4.0 β2 patchlevel d đến 4.0 patchlevel m. Từ thay đổi từ 4.0 đến 4.1 α:

n. Đã sửa lỗi hành vi set -utuân thủ phiên dịch Posix mới nhất: mọi sự mở rộng của một biến không đặt trừ $ @ và $ * sẽ khiến shell thoát ra.

Hành vi này được giới thiệu trong 4.0β2 vì hành vi trước đó (và bây giờ là hiện tại) được cho là có lỗi:

d. Đã sửa lỗi gây ra sự mở rộng của $ @ và $ * để không thoát khỏi trình bao nếu tùy chọn -u được bật và không có tham số vị trí.

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.