質問
私が思ったように、次の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`
おそらくあまり明確ではありません。ソリューションには、それを機能させるためにエコーの周りのバックティックが必要になることを確信しています。
所属していません StackOverflow