0

次のbashコマンド置換は、思ったとおりに機能しません。

echo $TMUX_$(echo 1)

1のみを出力し、変数の値を期待しています$TMUX_1。また、次のことを試しました。

echo ${TMUX_$(echo 1)}
-bash: ${TMUXPWD_$(echo 1)}: bad substitution

助言がありますか ?

4

3 に答える 3

1

私があなたが探しているものを正しく理解しているなら、あなたはプログラムで変数名を作成し、次にその変数の値にアクセスしようとしています。この種のことを行うには、通常、次のevalステートメントが必要です。

eval "echo \$TMUX_$(echo 1)"

$( )このステートメントの重要な機能には、がコマンド置換として適切に解釈されるように二重引用符を使用することと、最初$に評価されないように最初のステートメントをエスケープすることが含まれます。同じことを達成する別の方法は

eval 'echo $TMUX_'"$(echo 1)"

この場合、自動的に連結される2つの文字列を使用しました。最初は一重引用符で囲まれているため、最初は評価されません。

要件には1つの例外があります。変数の内容を変数名として使用する場合にeval備えて、Bashには間接参照のメソッドがあります。${!name}これは次のように使用できます。

tmux_var = "TMUX_$(echo 1)"
echo ${!tmux_var}

ただし、これを機能させるには名前付き変数が必要なので、1つのステートメントでそれを行う方法があるかどうかはわかりません。

PS私はそれecho 1がいくつかのより複雑なコマンドの単なる代用だと思います;-)

于 2011-09-11T02:41:32.363 に答える
0

アレイをお探しですか?Bashにはそれらがあります。bashで配列を作成して使用するには、いくつかの方法があります。配列に関するbashのマンページのセクションを強くお勧めします。コードのサンプルは次のとおりです。

TMUX=( "zero", "one", "two" )
echo ${TMUX[2]}

もちろん、この場合の結果は2つです。

bashのマンページからの短い行を次に示します。

   Bash provides one-dimensional indexed and associative array variables.  Any variable may be
   used  as  an indexed array; the declare builtin will explicitly declare an array.  There is
   no maximum limit on the size of an array, nor any requirement that members  be  indexed  or
   assigned  contiguously.  Indexed arrays are referenced using integers (including arithmetic
   expressions)  and  are  zero-based;  associative  arrays  are  referenced  using  arbitrary
   strings.

   An  indexed  array is created automatically if any variable is assigned to using the syntax
   name[subscript]=value.  The subscript is treated as  an  arithmetic  expression  that  must
   evaluate  to  a  number  greater  than  or equal to zero.  To explicitly declare an indexed
   array, use declare -a name (see SHELL BUILTIN COMMANDS below).  declare -a  name[subscript]
   is also accepted; the subscript is ignored.
于 2011-09-11T02:30:04.510 に答える
0

これは動作します(テスト済み):

eval echo \$TMUX_`echo 1`

おそらくあまり明確ではありません。どんな解決策でも、それを機能させるためにエコーの周りにバッククォートが必要になることはかなり確実です。

于 2011-09-11T02:41:12.787 に答える