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

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

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}} } 
  • Синтаксис инструкции ksh if
  • Как вызвать универсальную функцию без импорта ее файла?
  • Использует ли ksh88 число как десятичное с использованием синтаксиса 10 # n?
  • KornShell говорит мне «неизвестный формат спецификатора»
  • команда stat не найдена
  • Linux и Unix - лучшая ОС в мире.