thay đổi không có giấy tờ về hành vi của nội bộ 'nội bộ' trong bash 4.3?


7

Trong bash 4.2, một biến được khai báo là cục bộ cho hàm nhưng không có giá trị mặc định không cần nhập vào danh sách các biến - ít nhất là liên quan đến 'khai báo -p':

vermicelli$ bash --version | grep release
GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
vermicelli$ bash -c 'f1() { local Y; declare -p Y; }; f1'
declare -- Y
vermicelli$ 

Tuy nhiên, trong bash 4.3, đây không còn là trường hợp nữa:

lasagne$ bash --version | grep release
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
lasagne$ bash -c 'f1() { local Y; declare -p Y; }; f1'
bash: line 0: declare: Y: not found
lasagne$ 

Là sự thay đổi hành vi này được ghi nhận ở bất cứ đâu?

Nếu một giá trị mặc định được cung cấp (ví dụ: thay đổi 'cục bộ Y' thành 'cục bộ Y = 42') thì cả hai phiên bản bash đều hoạt động như nhau.

. bất kỳ đề cập đến sự thay đổi trong hành vi này.)


cho rằng phiên bản ngược dòng có thể đạt được thông qua git có hành vi này được hoàn nguyên, đó có thể là một lỗi
undercat hoan nghênh Monica

Câu trả lời:


4

Đoạn trích từ thay đổi bash:

Tài liệu này nêu chi tiết các thay đổi giữa phiên bản này, bash-4.4-alpha và phiên bản trước đó, bash-4.3-phát hành.

3. Các tính năng mới trong Bash

f. Các -ptùy chọn để khai báo và dựng sẵn tương tự sẽ hiển thị các thuộc tính cho các biến được đặt tên ngay cả khi các biến chưa được gán giá trị (mà là unset về mặt kỹ thuật).


Tài liệu này nêu chi tiết các thay đổi giữa phiên bản này, bash-4.3-alpha và phiên bản trước đó, bash-4.2-phát hành.

1. Thay đổi đối với Bash

hhhh Đã sửa lỗi gây ra declaretesttìm các biến đã được cung cấp thuộc tính nhưng không được gán giá trị. Các biến như vậy không được đặt.

Lưu ý rằng đó localchỉ là bí danh declare, ngoại trừ locallỗi khi nó không được gọi bên trong hàm.

Có vẻ như có typeset -pcác biến unset danh sách được coi là một lỗi, nhưng sau đó hành vi được hoàn nguyên vì có declare -pdanh sách các biến như vậy là một yêu cầu đủ phổ biến .

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.