매개변수와 함께 따옴표를 사용하는 것과 쉘 스크립트에서 따옴표를 사용하지 않는 것의 차이점은 무엇입니까?

매개변수와 함께 따옴표를 사용하는 것과 쉘 스크립트에서 따옴표를 사용하지 않는 것의 차이점은 무엇입니까?

나는 책을 읽고 있습니다리눅스 명령줄섹션 27에서는 쉘 스크립트 작성 방법을 가르쳐줍니다.파일 표현부분에서는 다음과 같이 말합니다.

스크립트는 상수 FILE에 할당된 파일을 평가하고 평가가 수행될 때 그 결과를 표시합니다. 이 스크립트에 대해 주목해야 할 두 가지 흥미로운 사항이 있습니다. 먼저 $FILE 매개변수가 표현식에서 어떻게 참조되는지 살펴보세요. 이는 필수는 아니지만 매개변수가 비어 있는 것을 방지합니다. $FILE의 매개변수 확장으로 인해 널값이 발생하면 오류가 발생합니다(연산자는 연산자 대신 비어 있지 않은 문자열로 해석됩니다).

"연산자는 연산자 대신 비어 있지 않은 문자열로 해석됩니다"라는 내용을 이해하지 못합니다. 누군가 나에게 예를 들어 줄 수 있습니까? 감사해요.

원래 코드는 다음과 같습니다.

#!/bin/bash
# test-file: Evaluate the status of a file
FILE=~/.bashrc
if [ -e "$FILE" ]; then
    if [ -f "$FILE" ]; then
        echo "$FILE is a regular file."
    fi
    if [ -d "$FILE" ]; then
        echo "$FILE is a directory."
    fi
    if [ -r "$FILE" ]; then
        echo "$FILE is readable."
    fi
    if [ -w "$FILE" ]; then
        echo "$FILE is writable."
    fi
    if [ -x "$FILE" ]; then
        echo "$FILE is executable/searchable."
    fi
else
    echo "$FILE does not exist"
    exit 1
fi
exit

답변1

값이 $FILE빈 문자열이고 인용하지 않으면 $FILE콘텐츠는 if [ -e $FILE ]; then가 됩니다 if [ -e ]; then. 이 명령의 규칙은 [와 사이에 값이 하나만 있는 경우 값이 빈 문자열이 아니면 true가 되고 빈 문자열이면 false가 됩니다(그래서 가져옵니다).[]if [ "" ]; thenelse

참고로 if [ -e "$FILE" ]; then가 되고 if [ -e "" ]; then[사이에는 2개의 값이 있으므로 ]다른 규칙이 적용됩니다.

관련 정보