2016-07-14 5 views
0
function to_call() 
{ 
    echo "#1 is $1" 
} 

function call() 
{ 
    local val=$(to_call testInput) 
} 

터미널에는 출력이 없습니다. 왜? 나는 그것을 변경하는 경우bash 쉘에서 변수의 출력을 변수에 지정하십시오.

대신 "값이 1"의

function to_call() 
{ 
    echo "#1 is $1" 
    return 1 
} 

function call() 
{ 
    local val=$(to_call testInput) 
    echo "value is $val" 
} 

, 그것은 "값 # 1 testInput이다"입니다. 무슨 일이야?

터미널에 "to_call 함수"의 메아리를 인쇄 할 수있는 방법이 있습니까? 또한 반환 상태를 사용합니까?

+0

> "bash에는 return 문이 있지만 함수의 상태는 exit 문에 지정된 값과 같은 숫자 값입니다 ( [source] (http : // www. linuxjournal.com/content/return-values-bash-functions) – pce

답변

1

command substitution (subshell을 호출 함) 때문에 출력이 출력되지 않습니다. 즉, 출력이 다시 할당됩니다. 함수의 stdout으로의 출력이 지역 변수에 재 할당됩니다.

bash return은 상태를 지정하는 것입니다. 은 exit과 같으며 쉘을 종료하지 않습니다. 함수의 "종료 상태"($?)를 반환 할 수 있습니다.

하위 프로세스의 범위에있는 변수는 상위 프로세스에서 액세스 할 수 없습니다.

관련 문제