web-dev-qa-db-ja.com

名前が特定のパターンに一致する変数のリストを取得します

Bashで

echo ${!X*}

名前が「X」で始まる変数のすべての名前を出力します。
任意のパターンで同じものを取得することは可能ですか?名前に「X」が任意の位置に含まれている変数のすべての名前を取得しますか?

36
Paolo Tedesco

組み込みコマンドcompgenを使用します。

compgen -A variable | grep X

これはそれを行う必要があります:

env | grep ".*X.*"

編集:申し訳ありませんが、値の中からXも検索します。このバージョンは、変数名でXのみを検索します

env | awk -F "=" '{print $1}' | grep ".*X.*"

Paulがコメントで指摘しているように、ローカル変数も探している場合は、envをsetに置き換える必要があります。

set | awk -F "=" '{print $1}' | grep ".*X.*"
10
diciu

これにより、変数名でのみXが検索され、一致する変数名のみが出力されます。

set | grep -oP '^\w*X\w*(?==)'

または検索されたパターンを簡単に編集するため

set | grep -oP '^\w*(?==)' | grep X

または単に(おそらく覚えやすい)

set | cut -d= -f1 | grep X

変数名内のXを一致させたいが、name = value形式で出力する場合は、次のようにします。

set | grep -P '^\w*X\w*(?==)'

変数名内のXを一致させたいが、値のみを出力する場合は、次のようにします。

set | grep -P '^\w*X\w*(?==)' | grep -oP '(?<==).*'
3
anandi

最も簡単なのは

printenv |grep D.*=

唯一の違いは、変数の値も出力することです。

2
alxp
env | awk -F= '{if($1 ~ /X/) print $1}'
1
dsm