以下のbashコマンドの置換は、私が思ったように動作しません。bashコマンドの展開
echo $TMUX_$(echo 1)
のみ1を出力し、私も試した変数$TMUX_1
.Iの値を期待しています:
echo ${TMUX_$(echo 1)}
-bash: ${TMUXPWD_$(echo 1)}: bad substitution
任意の提案ですか?
以下のbashコマンドの置換は、私が思ったように動作しません。bashコマンドの展開
echo $TMUX_$(echo 1)
のみ1を出力し、私も試した変数$TMUX_1
.Iの値を期待しています:
echo ${TMUX_$(echo 1)}
-bash: ${TMUXPWD_$(echo 1)}: bad substitution
任意の提案ですか?
あなたが探しているものを正しく理解している場合は、変数名をプログラムで作成し、その変数の値にアクセスしようとしています。この種のものを行うと、通常はeval
文が必要です。$()
が正しくコマンド置換、最初$
のエスケープとして解釈されますように、この文の
eval "echo \$TMUX_$(echo 1)"
重要な特徴は、二重引用符の使用を含みます最初に評価されることはありません。同じことを達成するための別の方法は、この場合には、私は自動的に連結され得る2つの文字列を使用
eval 'echo $TMUX_'"$(echo 1)"
です。最初は一重引用符で囲まれているため、最初は評価されません。
eval
要件には例外が1つあります。変数の内容を変数名として使用する場合、Bashには間接参照の方法${!name}
があります。次のようにして、これを使用することができます:
tmux_var = "TMUX_$(echo 1)"
echo ${!tmux_var}
あなたはこれを動作させるためにという名前の変数を持っている必要があるため、私は、しかし、1つのステートメントでそれを行う方法があるかどうかわかりません。
P.S.私はecho 1
がもっと複雑なコマンドのための単なるスタンドであると仮定しています;-)
アレイをお探しですか?バッシュはそれらを持っています。 bashで配列を作成して使用するにはいくつかの方法がありますが、配列の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.
私はbash配列を探していません。私は現在のウィンドウと同じディレクトリに新しいウィンドウを開くようにしようとしています(http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ) – yorua007
@ yorua007、このコードが必要ですbashのtcsh、右:[-n "$ TMUX"] && tmux setenv TMUXPWD _ $(tmux display -p "#I")$ PWD – casualcoder
はい、私はおそらく問題がここにないのですが、 '$ PS1'変数'TMUXPWD_ *'変数は更新されません。 – yorua007
(テスト)これは動作します:ここで
は、bashのmanページからいくつかの短い線であるけれども
eval echo \$TMUX_`echo 1`
おそらく非常に明確ではありません。どんな解決策でもエコーを回避するためにエコーの周りにバックティックが必要になることは間違いありません。
$ {!...}を使って解決策を見つけました。これは彼の目的のために働くでしょう。 ''複雑なコマンドについての私の他のコメントを見てください。'' :) – casualcoder
はい、 'echo 1'はテスト用です。どちらの提案も機能します。実際には、eval式の引用符を省略することができます。 – yorua007
@ yorua007:スペースがないので引用符を使わずにも動作しますので、単語の分割は問題になりません。私が指摘したかったのは、一重引用符ではなく二重引用符の使用でした。 –