abc=ok
gán một giá trị cho biến abc
. declare abc
khai báo một biến được gọi là abc
. Hai có thể được kết hợp như declare abc=ok
.
Trong bash, giống như các shell khác, các biến chuỗi và mảng không cần phải khai báo, do đó declare
không cần thiết trừ khi bạn muốn vượt qua các tùy chọn, ví dụ declare -A abc
để tạo abc
một mảng kết hợp hoặc declare -r
tạo một biến chỉ đọc. Tuy nhiên, bên trong một hàm, declare
sẽ tạo ra sự khác biệt: nó làm cho biến là cục bộ của hàm, nghĩa là giá trị của biến bên ngoài hàm (nếu có) được giữ nguyên. (Trừ khi bạn sử dụng declare -g
, làm cho biến không cục bộ; điều này hữu ích khi được kết hợp với các tùy chọn khác, ví dụ: declare -gA
để tạo một mảng kết hợp toàn cục trong một hàm.) Ví dụ:
f () {
declare a
a='a in f'
b='b in f'
echo "From f: a is $a"
echo "From f: b is $b"
}
a='Initial a'
b='Initial b'
f
echo "After f: a is $a"
echo "After f: b is $b"
Đầu ra:
From f: a is a in f
From f: b is b in f
After f: a is Initial a
After f: b is b in f
Một điều khác bạn có thể làm với declare
nội dung là
Nội dung declare
là duy nhất để bash. Nó được truyền cảm hứng mạnh mẽ và rất gần với typeset
nội dung của ksh , và bash cung cấp typeset
như một từ đồng nghĩa của declare
tính tương thích. (Tôi không biết tại sao bash không chỉ gọi nó typeset
). Có một từ đồng nghĩa thứ ba , local
. Ngoài ra, cũng export
giống như declare -x
, một lần nữa cho khả năng tương thích (với mọi vỏ kiểu Bourne).
declare
TÊN cục bộ, như vớilocal
lệnh. Các-g
tùy chọn ngăn chặn hành vi này. Xemhelp declare
.