-1
Perl 스타일의 "또는 죽어라"있는 Bash 함수가 있습니다. 예를 들어,명령 대체를 호출하지 않고 어떻게 Bash 함수를 호출 할 수 있습니까?
#!/bin/bash
func1() {
local val
val=`cat foobar` || exit 7
echo "func1: cat returns $?"
}
myval=`func1`
echo "Line X should not be reached (retn = $? val = $myval)"
myval=$(func1)
echo "Line Y should not be reached (retn = $? val = $myval)"
func1
echo "Line Z should not be reached (retn = $?)"
호출 기능은 직접의 나를 exit
을 활용할 수 있습니다. 그러나이 함수가 원하는 값을 반환하면 명령 대체는 exit
과 함께 작동하지 않습니다. 즉, 출구는 반환 값 $?
에 저장되고 다음 행이 실행됩니다.
디버그 옵션을 사용하여 실행하는 경우 -x
은 bash가 더 중첩 된 결과를 출력하기 때문에 명령 대체가 subshell과 유사하다는 것을 의미하는 것으로 보입니다. 따라서 exit
은 주 스크립트에 적용되지 않습니다.
샘플 출력 : 여전히 단락 exit
을 활용하면서
cat: foobar: No such file or directory
Line X should not be reached (retn = 7 val =)
cat: foobar: No such file or directory
Line Y should not be reached (retn = 7 val =)
cat: foobar: No such file or directory
는 FUNC1을 호출하고 그 출력을 사용하는 방법 (루프 변수에 등등 경우) 있는가?
짧은 대답을 원하는대로 완벽하게 작동 포함 : 아니요,이 두 가지를 한 번에 수행 할 수 없습니다. –
exit 대신'return 1 '을 사용하십시오. –
명령 대체는 서브 쉘과 유사하지 않습니다. 명시 적으로 주어진 명령을 수행 할 서브 쉘을 작성합니다. – chepner