2011-09-11 6 views
0

다음 bash 명령 대체가 생각보다 작동하지 않습니다.bash 명령 확장

echo $TMUX_$(echo 1) 

단 1 출력하고 또한 노력 변수 $TMUX_1 .I의 가치 기대하고있다 :

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

어떤 제안?

답변

1

내가 무엇을 찾고 있는지 정확히 이해하면 프로그래밍 방식으로 변수 이름을 만든 다음 해당 변수의 값에 액세스하려고합니다. 제대로 명령 치환으로 해석 가져옵니다 $() 있도록

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

중요한 기능 은 큰 따옴표의 사용을 포함, 첫 번째 $의 탈출 : 이런 종류의 물건을 이렇게하면 일반적으로 eval 문을 필요로 그래서 그것은 처음으로 평가받지 못합니다. 같은 것을 달성하는 또 다른 방법은이 경우에 자동으로 연결된 두 개의 문자열을 사용하는 것입니다.

첫 번째는 따옴표로 묶여 있으므로 처음에는 평가되지 않습니다.

eval 요구 사항에 대한 한 가지 예외가 있습니다. 변수 내용을 변수 이름으로 사용하려는 경우 Bash는 간접 참조 방법 인 ${!name}을 사용합니다. 다음과 같이이를 사용할 수 있습니다

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

잘 모르겠어요하지만, 하나 개의 문장에서 그것을 할 수있는 방법이 있다면, 당신은이 작업을 수행하려면 명명 된 변수를 가져야하기 때문이다.

P. 나는 echo 1이 좀 더 복잡한 명령을위한 스탠드 인 것으로 가정하고있다 .-

+0

방금 ​​$ {! ...}을 (를) 사용하여 솔루션을 찾았습니다. 이것은 그의 목적을 위해 작동 할 것이다; ''복잡한 명령에 대한 저의 다른 의견을보십시오.'': – casualcoder

+0

예, 'echo 1'은 테스트 용입니다. 두 가지 제안 모두 작동합니다. 그리고 실제로는 eval 표현식에서 따옴표를 생략 할 수 있습니다. – yorua007

+0

@ yorua007 : 공백이 없으므로 따옴표 없이도 작동하므로 단어 분리가 문제가되지 않습니다. 내가 지적하고자했던 것은 큰 따옴표를 사용하는 것이 아니라 작은 따옴표를 사용하는 것이 었습니다. –

0

배열을 찾으십니까? 배쉬가 가지고있다. 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. 
+0

나는 bash 배열을 찾고 있지 않다. 나는 단지 현재 창과 같은 디렉토리에 [tmux 새 창을 열려고한다] (http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ) – yorua007

+0

@ yorua007,이 코드를 원한다. bash의 tcsh, 오른쪽 : [-n "$ TMUX"] && tmux setenv TMUXPWD _ $ (tmux display -p "#I") $ PWD – casualcoder

+0

예, 여기서 문제가 아니지만'$ PS1' 변수 'TMUXPWD_ *'변수를 갱신하지 않습니다. – yorua007

0

:하지만 아마 매우 명확하지

eval echo \$TMUX_`echo 1` 

여기

는 배쉬 맨 페이지에서 짧은 몇 줄 수 있습니다. 어떤 솔루션이라도 작동하도록 에코 주변에 백틱이 있어야합니다.

관련 문제