質問

私が思ったように、次のBashコマンド代替は機能しません。

echo $TMUX_$(echo 1)

1のみを印刷し、変数の値を期待しています $TMUX_1私も試しました:

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

助言がありますか ?

役に立ちましたか?

解決

探しているものを正しく理解している場合、変数名をプログラム的に構築し、その変数の値にアクセスしようとしています。この種のことを行うには、通常は必要です eval 声明:

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

このステートメントの重要な機能には、ダブルクォートの使用が含まれます。 $( ) コマンドの代替として適切に解釈され、最初の逃亡 $ 初めて評価されないように。同じことを達成する別の方法です

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

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

には1つの例外があります eval 要件:Bashには間接的な参照方法があります、 ${!name}, 、変数の内容を変数名として使用する場合のためです。これを次のように使用できます。

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

ただし、1つのステートメントでそれを行う方法があるかどうかはわかりません。

PS私はそれを仮定しています echo 1 もっと複雑なコマンドの代役です;-)

他のヒント

アレイをお探しですか?バッシュにはそれらがあります。 bashに配列を作成および使用する方法はいくつかあります。アレイ上のバッシュマンページのセクションを強くお勧めします。これがコードのサンプルです:

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

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

これは、バッシュマンページからのいくつかの短い行です:

   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.

これは機能します(テストされました):

eval echo \$TMUX_`echo 1`

おそらくあまり明確ではありません。ソリューションには、それを機能させるためにエコーの周りのバックティックが必要になることを確信しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top