
나는 이 진술을 가지고 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
기존 파일을 참조합니다.