Предыдущие ответы не работают для нескольких устройств или для устройств с идентичными UUID.
Попробуйте следующее:
sudo blkid /dev/sd*
Хотя самым простым решением является использование env
вместо set
, env
не 'не передавать все существующие переменные, а только те, которые будут переданы любому процессу, запущенному с env
(так что никаких неэкспортируемых переменных, например). Другой подход заключается в поиске в выводе набора
строк, содержащих строку без пробелов, =
, а затем другую строку символов без пробелов:
set | grep -E '^\S+=\S'
Однако это пропустит любые переменные, для которых задано многострочное значение (например, IFS
, значение по умолчанию которого включает \ n
).
По какой-то странной причине, declare -p
, кажется, перечисляет только переменные:
$ declare -p
declare -x ANT_HOME="/usr/share/apache-ant"
declare -- BASH="/usr/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -A BASH_ALIASES=()
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
declare -A BASH_CMDS=()
...
Конечно, это имеет тот недостаток, что он выводит объявить
команды, которые могут воссоздать переменную со всеми ее атрибутами. В зависимости от того, что вы собираетесь делать с выводом, это может быть действительно полезно.
Я не уверен, но корова что-нибудь подумает.
_____
( env )
-----
o ^__^
o (oo)\_______
(__)\ )\/\
||----w |
|| ||
Другими словами, просто используйте вместо него env
.
Я думаю, она только что прочитала комментарий Джиллиагре.
________________________________
/ But it will only show exported \
\ variables! /
--------------------------------
\ ^__^
\ (!!)\_______
(__)\ )\/\
!! ||----w |
|| ||
Как я уже сказал в комментарии env
не соответствует требованиям, поскольку показывает только экспортированные переменные.
Обработка набора
вывода для фильтрации всего, что не похоже на определение переменной, является ненадежным взломом. В частности, вы пропустите часть переменных, значение которых содержит перевод строки. Хуже того, тщательно написанная функция может создать впечатление фальшивых определений переменных.
Самым простым решением является временное переключение в режим POSIX, в котором функции не считаются (своего рода) переменными:
set -o posix
set
set +o posix
Однако существует проблема, если вашим режимом по умолчанию уже является POSIX или если вы хотите, чтобы эта команда выполнялась работать в любом режиме POSIX, который установлен в оболочке.
В таком случае есть обходной путь:
(set -o posix;set)
Это только устанавливает режим POSIX для набора
, встроенного, выполняемого в подоболочке, и режим родительской оболочки остается неизменным.