Shellスクリプトの動的変数に格納されたコンテンツの生成

Shellスクリプトの動的変数に格納されたコンテンツの生成

以下のコードで詰まっています。助けてくれてありがとう。

動的に生成された変数内のコンテンツを別の変数に割り当てようとしています。しかし、変数の値が割り当てられているのではなく、変数名が割り当てられているのがわかります。 (echo/eval/!) 試してみましたが、何も動作しませんでした。誰でもトラブルシューティングを支援できますか?

目的:値24を指定(変数に保存)msd_ext_len)到着最終カウント変える

変数宣言

iter_val=1

var_1="msd_ext"

msd_ext_len=24

パスワード:

eval "final_count"=\${var_${iter_val}}_len

出力 -->msd_ext_len

期待される出力 -->24

上記のコードと一緒に1行のコード(下の表示)を追加すると、次の結果が出力されます。

count_val=${!final_count}

しかし、この2行のコードを1つにまとめることができますか?

ベストアンサー1

したがって、最初に次の操作を実行するたびに${var_${iter_val}}(たとえば、変数名に数字を追加したい場合など)、配列を使用する必要があります。

arr=(a b c)
arr[1]=x
i=1
echo "${arr[i]}"

インデックスを作成する必要がある場合ひも代わりに連想配列(declare -A arraynameBashの場合)を使用してください。

配列のいくつかの「オブジェクト」に対して異なる属性を有するようなそれらの組み合わせは、より困難である。 2つの別々の配列を使用してからfoo[i]sumを使用できますbar[i]

それでも名前でこれらの配列を間接的に指す必要がある場合は、名前参照が必要です。

foo=(a b c)
bar=(x y z)
declare -n arrname=foo
echo "${arrname[i]}"

あなたのコードはあなたのデータ構造が正確に何であるかを知らないので、この場合の答えを提供することは困難です。


例を書き直してください。次のことができます。

varnames=()
varnames[1]=msd_ext
varnum=1
msd_ext_len=24

declare -n srcvar="${varnames[varnum]}_len"
declare -n dstvar=final_count
dstvar=$srcvar

echo $final_count

ネストされた拡張は実際には機能しないvarnamesため、まだ配列を使用する必要があります。${var_$foo}

望むより:

おすすめ記事