下面的bash命令替換不能像我想的那樣工作。bash命令擴展
echo $TMUX_$(echo 1)
只打印1和我期待的變量$TMUX_1
。我也試過值:
echo ${TMUX_$(echo 1)}
-bash: ${TMUXPWD_$(echo 1)}: bad substitution
有什麼建議?
下面的bash命令替換不能像我想的那樣工作。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)"
其中在這種情況下,我用了兩個字符串自動獲取連接在一起。第一個是單引號,因此它一開始沒有被評估。
eval
要求有一個例外:Bash有一個間接參照方法${!name}
,用於當您想將變量的內容用作變量名時。可以按如下方式使用:
tmux_var = "TMUX_$(echo 1)"
echo ${!tmux_var}
我不知道是否有一種方法做它一個說法,不過,因爲你必須對此有一個命名變量的工作。
P.S.我假設echo 1
只是一個更復雜的命令的替身;-)
你在尋找數組嗎? Bash擁有它們。有許多方法可以在bash中創建和使用數組,強烈建議使用陣列上的bash manpage部分。這裏是一個代碼示例:
TMUX=("zero", "one", "two")
echo ${TMUX[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.
我不是在尋找bash數組。我只是試圖使[tmux在與當前窗口相同的目錄中打開新窗口](http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ) – yorua007
@ yorua007,你想要這個代碼tcsh in bash,right:[-n「$ TMUX」] && tmux setenv TMUXPWD _ $(tmux display -p「#I」)$ PWD – casualcoder
是的,我發現問題不在這裏,而是在$ PS1變量不會更新'TMUXPWD_ *'變量。 – yorua007
此作品(測試):
eval echo \$TMUX_`echo 1`
可能不是很清楚,但。很確定任何解決方案都需要在回聲周圍反引導才能使其工作。
剛剛使用$ {!...}找到解決方案。這將用於他的目的;看到我對複雜命令的其他評論。'':) – casualcoder
是的,'echo 1'只是爲了測試。你的建議都有效。實際上,您可以省略eval表達式中的引號。 – yorua007
@ yorua007:是的,它也沒有任何引號,因爲沒有空格,所以分詞不是問題。我的意思是指出使用雙引號而不是單引號。 –