abc=okприсвоює значення змінній abc. declare abcоголошує змінну, що називається abc. Ці два можуть поєднуватися як declare abc=ok.
В bash, як і інші оболонки, змінні рядків і масивів не потрібно декларувати, тому declareне потрібно, якщо ви не хочете передавати параметри, наприклад, declare -A abcстворити abcасоціативний масив або declare -rзробити змінну лише для читання. Однак всередині функції все-таки declareмає значення: це призводить до того, що змінна є локальною для функції, тобто значення змінної за межами функції (якщо така є) збережена. (Якщо ви не використовуєте declare -g, що робить змінну не локальною; це корисно в поєднанні з іншими параметрами, наприклад, declare -gAдля створення глобального асоціативного масиву у функції.) Приклад:
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"
Вихід:
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
Ще одна річ, яку ви можете зробити з declareвбудованим - це
declareВбудований є унікальною для Баша. Він натхненний і дуже близький до typesetвбудованої програми ksh , а bash - typesetце синонім declareсумісності. (Я не знаю, чому Баш не просто так зателефонував typeset). Там ще третій синонім local. Є також exportте ж саме declare -x, що і для сумісності (з кожною оболонкою в стилі Борна).
declareробить NAMEs локальними, як і вlocalкоманді. Цей-gваріант пригнічує таку поведінку. Дивhelp declare.