Есть ли разница между использованием typeset в ksh и простой установкой переменной?

StackOverflow https://stackoverflow.com/questions/1027869

  •  06-07-2019
  •  | 
  •  

Вопрос

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

<Ол>
  • typeset TARGET = " $ {XMS_HOME} / common / jxb / config / $ {RUNGROUP}. $ {ENV} .properties "
  • <Литий> <код> TARGET = & Quot; $ {XMS_HOME} / общие / JXB / конфигурации / $ {RUNGROUP} $ {ENV} .properties & Quot;.
    Это было полезно?

    Решение

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

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

    распечатает

    0
    2
    

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

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

    Другие советы

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top