Есть ли в Cygwin (или в реальной оболочке UNIX) какая-либо команда для импорта имен из другого пространства имен в текущее пространство имен, как в Python? - PullRequest
0 голосов
/ 01 сентября 2011

В Python мы можем использовать «импорт» для импорта имен другого пространства имен в текущее пространство имен.

Аналогично, существует ли вообще такое понятие, как «пространство имен», в сценариях оболочки UNIX? Если это так, то имеет ли Cygwin (или реальная оболочка UNIX) какую-либо команду для импорта имен из другого пространства имен в текущее пространство имен, как в Python? Спасибо.

Примечание для членов сообщества с правами администратора: я действительно думаю, что этот вопрос - вопрос программирования, а не вопрос "суперпользователя". Пожалуйста, уточните, почему, если вы не согласны с этим. Большое спасибо за ваше время.

1 Ответ

0 голосов
/ 02 сентября 2011

Нет способа сделать именно то, что вы просите.

Команда source envFile и ее альтернатива . envFile могут быть очень полезны.

Файл envFile будет просто списком параметров среды.

FrontOfficeSystem=MyFrontOffice
BackOfficeSystem=myBackOffice

Когда вы включаете в свой сценарий команду для «источника» envFile (подойдет любое имя), оболочка считывает код, как если бы он был непосредственно в вашем основном сценарии оболочки. Как «включить» во многих языках. Но пространства имен ... Нет. Смотри дальше.

Более полезно: см. косвенные ссылки в расширенных сценариях Bash, это, вероятно, лучше, чем использование eval ... (см. Ниже), но у меня не было возможности работать с ним.

наконец, вы также можете извлечь выгоду из косвенности eval и varname, т.е.

 src=FrontOffice
 eval \$${src}System="${src} has data"

 src=BackOffice
 eval \$${src}System="${src} has data"

Не очень хороший пример, но у меня нет доступа к сценариям, в которых я действительно ездил в город с этой идеей. Это помогло мне обобщить (sp) некоторый код, который в противном случае пришлось бы повторять 10 раз для каждого источника данных (я поместил повторяющийся блок кода в цикл for с именами src в качестве списка элементов для for (каждый ), тогда eval расширит $ {src} System как FrontOfficeSystem, BackOfficeSystem). Если вы наберете пробелы в своих значениях для списка src, все ставки будут отменены.

используйте set -vx в окне терминала и скопируйте / вставьте код выше, чтобы увидеть, как он работает. Это может помочь.

Надеюсь, это поможет.

P.S. поскольку вы выглядите новым пользователем, если вы получаете ответ, который помогает вам, не забудьте пометить его как принятый и / или дать ему + (или -) в качестве полезного ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...