たとえば、1つ以上の他の項目がある可能性があるトピック関連のシェルB2_...
(環境ではない)変数名を拡張する必要があります。...
ACCOUNT_ID
ACCOUNT_KEY
RESPOSITORY
どのくらいの変数があるのか、どの変数なのかわかりません。それが私が知りたいことです。
B2...
ファイル名を拡張する方法と同様に、各個々の名前をリストに入れずに変数を繰り返すことができます。
対話型セッションにはzshを使用しますが、shまたはbashソリューションもうまく機能します。
答え1
答え2
B2_
B2
名前で始まる単一の変数を使用する代わりに、連想配列()を使用できます。例えば
注:以下にのみ該当し、zsh
連想配列ksh
もbash
ありますが、それを初期化して使用する構文は異なります(以下を参照)。
typeset -A B2
# initialise array
B2=(ACCOUNT_ID 12345 ACCOUNT_KEY 54321 REPOSITORY somewhere)
# two different ways of adding elements to the array
B2[FOO]=bar
B2+=(NAME fred)
for key val in ${(kv)B2}; do
echo "$key: $val"
done
この例の出力は次のとおりです。
ACCOUNT_KEY: 54321
FOO: bar
REPOSITORY: somewhere
ACCOUNT_ID: 12345
NAME: fred
以下を使用して、配列全体を(スクリプトまたはコマンドラインで再利用するのに適した形式で)印刷することもできますtypeset -p
。
% typeset -p B2
typeset -A B2=( ACCOUNT_ID 12345 ACCOUNT_KEY 54321 FOO bar NAME fred REPOSITORY somewhere )
またはBashでの同じ操作ksh
は次のようになります。
# initialise it
typeset -A B2
B2=([ACCOUNT_ID]=12345 [ACCOUNT_KEY]=54321 [REPOSITORY]=somewhere)
# add elements
B2[FOO]=bar
B2+=([NAME]=fred)
# get a list of the keys and use them as indexes to get the values
for key in "${!B2[@]}"; do
echo "$key: ${B2[$key]}"
done
# print the entire array
typeset -p B2
答え3
バッシュはcompgen -v
。
Bashでは、次から始まる変数名を一覧表示できます。B2
使用:
compgen -v B2
コマンドを実行すると、次の入力時にオートコンプリートの結果として使用できるのと同じ変数が一覧表示されます。compgen -v text
$
text
次に Tab キーを押します。 (すべての項目を表示するには、Tabキーを数回押す必要があるかもしれません。)compgen -v
対話的に使用できますが、スクリプトで使用することもできます。たとえば、
$ bash -c 'compgen -v SDK'
SDKMAN_CANDIDATES_DIR
SDKMAN_CURRENT_API
SDKMAN_DIR
SDKMAN_LEGACY_API
SDKMAN_PLATFORM
SDKMAN_VERSION
(もちろん、スクリプトはフラグのオペランドbash
に渡されずにファイルに配置できます。)-c
目的compgen
はコマンドを完了することです。help compgen
これに関する一般的な情報については、出力を参照してください。これはあなたの要件を満たすことができますが、次のパラメータ拡張技術などの他のアプローチを見つけることもできます。Gil Quinaultの回答、あなたがしていることをより明確に表現してください。個人の好みや活動によって異なるため、どちらが良いと言うことはできません。
答え4
そしてzsh
:
for var (${(M)${(k)parameters}:#B2_*})
printf '$%s == %s\n' $var ${(P)var}
${(k)parameters}
はい鍵$parameters
すべてのパラメータに関する情報を提供する特別な連想配列。${array:#B2_*}
削除$array
拡張で一致する要素B2_*
。(M)
(パッチが適用された場合)にはM
反対が適用されます。維持する一致する要素。${(P)var}
bash
( 'sに似ています${!var}
):名前が保存されているパラメータの値に展開されます$var
。
エクスポートされていない変数だけが必要な場合:
setopt extendedglob # for ^
for var (${(M)${(k)parameters[(R)^*export*]}:#B2_*})
printf '$%s == %s\n' $var ${(P)var}