스크립트의 변수 비교

스크립트의 변수 비교

나는 이 진술을 가지고 if [ ! - f "$i" -o "$i"x = "$MTR"x]있으며 이 진술이 무엇을 달성하는지 궁금합니다. 나는 첫 번째 부분이 변수가 i파일이 아닌지 확인하지만 그 뒤의 두 번째 부분이 무엇인지 알아낼 수 없다는 것을 이해합니다 -o(논리적 OR을 나타냄). 어떤 도움이라도 가장 도움이 될 것입니다.

답변1

맞습니다. -o는 논리적 OR을 나타냅니다. 는 의 내용을 변수 및 와 비교
합니다 . 두 변수 중 하나라도 설정되지 않았거나 초기화되지 않은 경우 문제를 피하기 위해 두 변수에 모두 추가된 것 같습니다 ."$i"x = "$MTR"x$i$MTR
x

답변2

진술이 다음과 같다고 가정하면

if [ ! -f "$i" -o "$i"x = "$MTR"x ]

-f "$i"값이 $i일반 파일(또는 일반 파일에 대한 심볼릭 링크)에 해당하는지 확인 합니다. 그런 다음 이 테스트는 로 무효화됩니다 !. 이는 -o"논리적 OR"을 말하는 구식이고 쓸모없는 방법입니다.

테스트 는 쉘 "$i"x = "$MTR"x의 오래된 구현에서 필요했을 수도 있는 다소 어색한 방식으로 sh, $i$MTR동일한 문자열인지 여부를 확인합니다.

(현재) 표준 sh쉘에서 명령문은 다음과 같이 작성됩니다.

if [ ! -f "$i" ] || [ "$i" = "$MTR" ]

또는 약간의 논리를 적용하면

if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]

즉, 이 명령문 $i은 와 동일한 문자열 $MTR이고 기존 일반 파일(또는 이에 대한 심볼릭 링크)을 참조하거나 $i파일 이름이 아닌 경우 참입니다.

이 진술이 무엇을 의미하는지 살펴보는 것이 더 흥미로울 수 있습니다.거짓. 동일한 문자열이 아닌 $i경우 에만 거짓입니다.$MTR그리고 $i기존 파일을 참조합니다.

관련 정보