나는 이 진술을 가지고 if [ ! - f "$i" -o "$i"x = "$MTR"x]
있으며 이 진술이 무엇을 달성하는지 알고 싶습니다. 첫 번째 부분은 변수가 파일이 아닌지 확인 i
하지만 그 뒤에 있는 두 번째 부분이 무엇인지는 알 수 없습니다 -o
(논리적 OR을 의미하는 것 같습니다). 어떤 도움이라도 매우 도움이 될 것입니다.
답변1
맞습니다. -o는 논리적 OR을 나타냅니다. 변수 sum 의 내용 과
비교해보세요 . 변수 중 하나가 설정되지 않거나 초기화되지 않은 경우 문제를 피하기 위해 두 변수에 모두 추가된 것 같습니다 ."$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
기존 파일을 참조합니다.