Использование псевдонимов директивы и имен с помощью Ksh

Могу ли я создать псевдоним для пространства имен оболочки korn? Есть ли что-то вроде директивы using в C++ (объединить несколько пространств имен и выбросить ошибку (компилятор), если обозначение символа неоднозначно)?

  • ksh: сохранение вывода команды awk в массиве
  • Возвращаемое значение из индекса в ksh
  • Как проверить скрипт ksh на ошибки синтаксиса?
  • Возвращать длинное целочисленное значение из функции в ksh
  • Как распечатать конкатенацию строк в Korn Shell
  • Как вызвать универсальную функцию без импорта ее файла?
  • Использует ли ksh88 число как десятичное с использованием синтаксиса 10 # n?
  • KSH, в то время как цикл вызывает проблемы
  • One Solution collect form web for “Использование псевдонимов директивы и имен с помощью Ksh”

    Несмотря на то, что у ksh есть более продвинутая функция, чем другие оболочки, она по-прежнему является основным языком для автоматизации простой задачи и написания небольших скриптов, а не языка, предназначенного для написания огромных приложений. Вы не можете ожидать, что у вас есть все особенности типичного языка, предназначенного для больших приложений, не говоря уже о всех функциях C ++.

    Я не думаю, что вы можете создать псевдоним для пространства имен. Вы можете создать копию пространства имен сортировки, перечислив ее переменные (проанализировать вывод typeset +p или typeset -p или использовать ${!.foo.*} Если вы хотите включить переменные, унаследованные от родительского пространства имен) и копируя их один за другим. Вы можете сделать переменную псевдоним другого с помощью typeset -n , но это действует только при использовании внутри пространства имен:

     $ namespace foo { x=1; } $ namespace bar { typeset -nx=.foo.x; echo $x; } 1 $ namespace foo { x=2; } $ namespace bar { echo $x; } 2 $ echo ${.bar.x} .foo.x 

    Ksh позволяет вам двигаться дальше и выполнять произвольный код, когда переменная читается, изменяется или не задается, с функциями дисциплины. Например, если вы определяете функцию, называемую x.get , эта функция вызывается каждый раз, когда извлекается значение x .

     namespace bar { x.get () { _=${.foo.x}; } x.set () { .foo.x=${.sh.value}; } x.append () { .foo.x+=${.sh.value}; } x.unset () { unset ${.sh.name}; } } 

    Я думаю, вы должны определить их для каждой переменной, и вы не можете обнаружить переменные, которые добавляются в пространство имен foo .

    Это может быть расширено для поиска нескольких пространств имен.

     x.get () { if ((${.foo.x+1}+${.bar.x+1}!=1)); then echo 1>&2 "Ambiguous variable x, available in more than one of foo and bar" exit 125 fi _=${.foo.x-${.bar.x}} } 
    Linux и Unix - лучшая ОС в мире.