에서 bash
모든 변수 기본적으로 문자열 (또는 배열 또는 함수,하지만 일반 변수 여기에 대한하자의 이야기)입니다.
조건은 테스트 명령의 반환 값을 기반으로 구문 분석됩니다. 반환 값은 변수가 아니며 종료 상태입니다. 당신이 평가하는 경우 if [ ... ]
나 if [[ ]]
나 if grep something
나처럼 아무것도, 반환 값 0 (안 문자열 0하지만, 종료 상태 0 = 성공)가 true를하고, 나머지는 평균 거짓 (의미 그래서, 당신은 컴파일 프로그래밍 언어에 사용되는 것과 정확히 반대, 그러나 성공할 수있는 한 가지 방법과 실패 할 수있는 여러 가지 방법이 있으며 예상되는 실행 결과는 대개 성공이므로 0이 잘못되면 가장 일반적인 기본 결과로 0이 사용됩니다). 바이너리는 테스트로 사용될 수 있기 때문에 매우 유용합니다. 실패하면 거짓, 그렇지 않으면 사실입니다.
true
및 false
(보통 내장 명령으로 대체) 프로그램은 아무것도하지 않고 단지 유용한 작은 프로그램입니다 - true
아무것도하지 않고에서 성공하고 종료 0, 동안 false
시도는 아무것도하지과 1 사운드 무의미와 exitting, "실패"하지만 스크립팅에 매우 편리합니다.
진실함을 전달하는 방법은 당신에게 달려 있습니다. 진실과 사용을 위해 "y"또는 "yes"를 사용하는 것이 일반적입니다 if [ x"$variable" = x"yes" ]
( 길이가 0 인 x
경우 더미 문자열을 추가하여 구문 분석하지 않는 $variable
가짜 명령 if [ = "yes" ]
을 생성 하지 못하도록합니다). 단순히 빈 문자열을 false로 사용 [ -z "$variable ]
하고 길이가 0인지 (또는 0이 아닌지) 테스트 하는 데 유용 할 수 있습니다 -n
.
어쨌든 실제로 부울 값을 전달 해야하는 경우는 거의 없습니다 . 실패 bash
했을 때보 다 훨씬 일반적 exit
이거나 유용한 결과를 반환하거나 무언가 잘못되면 0을 반환하고 빈 문자열을 테스트하면 대부분의 경우 출구 statatus에서 직접 실패를 테스트합니다.
귀하의 경우 다른 명령으로 작동하는 함수 (따라서 성공하면 0을 반환)를 원하므로 마지막 옵션이 올바른 선택 인 것 같습니다.
또한 return
진술 이 필요하지 않을 수도 있습니다 . 함수가 충분히 단순하면 함수에서 마지막으로 실행 된 명령의 상태를 단순히 반환한다는 사실을 사용할 수 있습니다. 그래서 당신의 기능은 단순히
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
장치 노드가 있는지 테스트하는 경우 (또는 grep /proc/mounts
이 마운트되어 있는지 확인하려면?)
help true ; help false ; help exit