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

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

  • просмотр значений переменных в скрипте KSH
  • Синтаксис инструкции ksh if
  • команда внутри переменной
  • Управление выпуском в командной строке после завершения процесса раздвоения
  • Возвращать длинное целочисленное значение из функции в ksh
  • Как вызвать универсальную функцию без импорта ее файла?
  • Запись в следующую строку в разделенном PIPE файле
  • KornShell говорит мне «неизвестный формат спецификатора»
  • 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}} } 
    Interesting Posts

    Как настроить разрешения на внешний жесткий диск, чтобы использовать его для резервного копирования с помощью rsync?

    Как запустить приложение автоматически?

    Удалите введенный код из всех php-файлов в каталоге Ubuntu

    Как изменить шрифт на Skype 5.3 (skypeforlinux) на Fedora 25

    Как заменить строку строкой, содержащей слэш с sed?

    Имеются ли права родительского каталога при доступе к подкаталогу?

    tcpdump не захватывает трафик http или tcp / ssl

    iptables – как отказаться от протоколов

    Не удается загрузить окна после удаления раздела Linux

    Разбор заголовков файла последовательности

    Являются ли потоки ядра Linux действительно ядрами?

    Почему я не могу запускать приложения GUI из «root»: «Не указан протокол»?

    Как разместить сайт локальной сети, недоступный за пределами локальной сети?

    Как добавить / удалить задания cron по сценарию?

    Проблемы с разрешением Nvidia 9800GT и HP w1907v

    Linux и Unix - лучшая ОС в мире.