2012-10-01 2 views
0
내부 비교를 수행

가 떠들썩한 파티 스크립트에서 다음?역 따옴표

totaltrackseval=`if [[ $totaltracks -ge 0]]; then; echo '-N $totaltracks'; else; echo 'elsetext'; fi` 

그렇다면 유사한 일을 할 수 있는가, 어떻게?

답변

3

원하는대로 할 수 있습니다. 당신은 처음에는 거의 성공했습니다. 사실 나는 이중 따옴표 대신에 작은 따옴표를 사용했다. 작은 따옴표 안에서는 변수 대체가 작동하지 않습니다. 또한 테스트를 위해 대괄호를 사용하면 안쪽에 공백이 있어야합니다.

totaltrackseval=`if [ $totaltracks -ge 0 ]; 
       then 
        echo "-N $totaltracks" 
       else 
        echo "elsetext" 
       fi` 

당신은 한 줄 구현을 선호하는 경우 :

totaltrackseval=`if [ $totaltracks -ge 0 ]; then echo "-N $totaltracks"; else echo "elsetext"; fi` 
+0

이것은 내 것보다 깨끗한 해결책이며, upvote입니다. – Nelson

+0

감사합니다. 이것은 완벽하게 작동했습니다. 내가 그것을 틱했을 때 나는 반응했을 것이다. 그러나 3am이었고 나는 자고 싶었다. :) –

1

당신은 다음과 같이 그것을 할 수 있습니다 :

totaltrackseval=`bash -c "if [[ $totaltracks -ge 0 ]]; then echo '-N $totaltracks'; else echo 'elsetext'; fi"` 

테스트 :

[email protected]:~$ totaltracks=5 
[email protected]:~$ totaltrackseval=`bash -c "if [[ $totaltracks -ge 0 ]]; then echo '-N $totaltracks'; else echo 'elsetext'; fi"` 
[email protected]:~$ echo $totaltrackseval 
-N 5 
+0

이것은 작은 따옴표 안에 $ totaltracks와 함께 작동하지 않을 것이다. –

+0

$ totaltracks는 if의 TRUE 부분에 작은 따옴표 안에 들어 있으며 올바르게 실행됩니다. 작동하지 않는 이유를 명확히 할 수 있습니까? 구체적인 예를 들어? – Nelson

+0

작은 따옴표 안에 $ totaltracks 참조가 bash로 실제 값으로 유지되지 않기 때문에. 샘플 스크립트 : –

0

또 다른 접근 방식을 , 두 가지 유형의 매개 변수 확장을 사용합니다. totaltracks이 설정되어 있지 않거나 음수가 아닌 정수 값을 가지고 있다고 가정합니다.

# Use an alternate value for totaltracks if it is set 
totaltrackseval=${totaltracks:+-N $totaltracks} 

# Use a default text if totaltrackseval still has no value 
: ${totaltrackseval:=elsetext}