シェルスクリプトで変数名を動的に設定するには?

シェルスクリプトで変数名を動的に設定するには?

私は次のようなものを探していますsh(はい、はい)

#!/bin/bash

exe1='filepath'
n=1
var=exe${n}
echo ${!var}

echoが出力されるべき場所filepath。普通のshを使いたいです。

私はコードでたくさん試しましたが、これまで正しい出力を取得できませんでした。

ループを使用して既知の数の変数の変数名を繰り返す配列などの構造を実装したいと思います。

私が見つけた配列の場合POSIX互換シェルの配列しかし、好奇心が強いので、私はまだ私の質問に対する答えを探しています。 ;)

ベストアンサー1

sh質問に記載されているものと同じスクリプト:

#!/bin/sh

exe1='filepath'
n=1
var=exe$n
eval "echo \"\$$var\""   # or: eval 'echo "$'"$var"'"'

このeval行は、現在の環境で指定された文字列をコマンドとして評価します。与えられた文字列はecho \"\$$var\"変数拡張などを経た後になりますecho "$exe1"。これはeval再評価のために渡され、コマンドは文字列を印刷しますfilepath


配列についても言及しました。 POSIXshシェルにはegと同じ意味で名前付き配列がありませんが、bashまだ位置引数のリストがあることは事実です。

これにより、シェルのリストを使用して実行する必要があるほとんどのタスクを実行できます。

例えば、

set -- 'filepath1' 'filepath2' 'filepath3'

for name in "$@"; do    # or: for name do
    echo "$name"
done

これは以前と同じです。

for name in 'filepath1' 'filepath2' 'filepath3'
do
    echo "$name"
done

私はあなたが何を達成したいのかを正確に知っているので、より興味深い例を考えることはできません。しかし、ここで繰り返すことができる配列に似た構造があります。繰り返し可能な変数の名前が欲しい理由はまだ明確ではありません。

おすすめ記事