Як сумісний з posix способом, який працює з декількома реалізаціями, як я можу надрукувати список визначеної в даний час змінної середовища без їх значень?
У деяких реалізаціях (mksh, freebsd / bin / sh) export
законопроект підходить просто за допомогою самого себе:
$ export
FOO2
FOO
Але для деяких інших реалізацій (bash, zsh, dash) export
також показує значення. Наприклад, з bash:
$ export
export FOO2='as df\
asdk=fja:\
asd=fa\
asdf'
export FOO='sjfkasjfd kjasdf:\
asdkj=fkajdsf:\
:askjfkajsf=asdfkj:\
safdkj'
$ printenv | sed -n l
FOO2=as\tdf\$
asdk=fja:\$
asd=fa\$
asdf$
FOO=sjfkasjfd kjasdf:\$
asdkj=fkajdsf:\$
\t:askjfkajsf=asdfkj:\$
safdkj$
Інші параметри, такі як env
або printenv
не мають опцій для друку лише імен змінних без значень, принаймні, не на платформах Linux та freebsd, які я пробував.
Трубопроводи до awk / sed / тощо. або обрізка списку методами розширення параметрів (наприклад, ${foo%%=*}
) є прийнятною, але вона повинна працювати зі значеннями, які можуть охоплювати лінії та мати =
пробіл у значенні (див. приклад вище).
Відповіді, характерні для конкретних реалізацій оболонок, цікаві, але я в першу чергу шукаю те, що сумісне в усіх реалізаціях.
export -p
для цього?
export -p
тому що це дасть вам постійний вихід на всі оболонки POSIX, які ви сказали, що хочете.
export -p
не відповідає першій вимозі - друкувати лише імена змінних без значень.
export -p
. Я не збираюся писати цей синтаксичний розбір, тому що в загальному випадку він також повинен буде зробити належний аналіз цитат, якщо у вас є змінна, значення якої чимось схоже hello\nexport var=value
. Однією з небагатьох інших команд, яка дасть вам постійний вихід у всіх оболонках POSIX, є env
, але цей вихід важче проаналізувати, оскільки йому бракує export =
біт.
export -p
який визначено POSIX, щоб генерувати вихід, який також підходить для введення в оболонку.