Есть ли разница между использованием typeset в ksh и простой установкой переменной? - PullRequest
4 голосов
/ 22 июня 2009

Следующие 2 строки полностью эквивалентны? Если нет, то какая разница? Я видел множество сценариев оболочки, использующих номер 1, и мне было просто интересно, что он дает вам по сравнению с номером 2.

  1. typeset TARGET="${XMS_HOME}/common/jxb/config/${RUNGROUP}.${ENV}.properties"
  2. TARGET="${XMS_HOME}/common/jxb/config/${RUNGROUP}.${ENV}.properties"

Ответы [ 2 ]

4 голосов
/ 22 июня 2009

typeset создаст локальную переменную (которая не «течет»). Это полезно в функциях, но я также видел, что он используется на верхнем уровне сценария оболочки.

a=0
function x {
    typeset a=1
}
x
echo $a
function y {
    a=2
}
y
echo $a

напечатает

0
2

Вы также можете использовать typeset для создания массивов и целых чисел.

[EDIT] Добавлено ключевое слово function, потому что оно требуется для некоторых оболочек. Удалите его, если он нарушает вашу оболочку, но он должен работать с большинством версий.

0 голосов
/ 15 декабря 2009

, поскольку сценарии оболочки являются свободно типизированным языком (в котором переменные не имеют тип данных), мы можем использовать набор типов, чтобы установить конкретную переменную, принимающую только похожие типы данных.

...