Closed6
シェル変数の一覧を見るワンライナーを作る
環境変数の一覧を見るには printenv
コマンドがある。これにはシェルの変数が含まれない。
シェルの変数も含めて一覧を見るには set
コマンドがある。これの変数名だけを取得したい。
$ set
set
コマンドを実行すると、以下は抜粋だがこのように表示される。
HOME=/home/ec2-user
HOST_GID=1000
HOST_UID=1000
HOST_USER=ec2-user
LANG=en_US.UTF-8
LESSCHARSET=UTF-8
各行で先頭の =
までを抜き出す処理を入れてみる。
$ set | sed -E -e 's/^(.+?)=.*$/\1/g'
HOME
HOST_GID
HOST_UID
HOST_USER
LANG
LESSCHARSET
set
の出力を見るとたまに =
がない変数名だけのものがあるが、それはそのまま出力される。
一見うまくいってそうだが、以下のような行があった。
LS_COLORS='rs=0:di=01;34:...
値自体に =
があるとダメの様子。
最短一致の量指定子 .+?
が最短一致になっていない気がする。
sedには最短一致ができないようなので、こうする。 (.+?)
を (^=+)
にしている。
$ set | sed -E -e 's/^([^=]+)=.*$/\1/g'
出力結果の先頭のほうは、記号が含まれていてシングルクオートで囲まれる。
'!'
'#'
'$'
'*'
-
0
'?'
@
ARGC
CDPATH
zshで作業していての動作確認だったので、bashでも同じコマンドを試してみた。
記号が含まれていてシングルクオートで囲まれるものは、bashでは出力されない。
結論
$ set | sed -E -e 's/^([^=]+)=.*$/\1/g'
このスクラップは2023/07/08にクローズされました