왜 값이 1인가요?

왜 값이 1인가요?

저는 쉘 스크립팅을 배우고 있으며 사용자에게 "7" 권한("rwx")이 있는 파일을 나열하는 스크립트를 작성하고 있습니다. 지금까지 나는 이렇게 썼다:

for F in *
do
        a= $(stat -c "%a" "$F")
        echo $a
        if ((b==7))
        then
                echo $F
        fi
done

여기서 a의 값은 "1"입니다. 내가 여기서 뭘 잘못하고 있는 걸까?

답변1

쉘에서는 공간이 중요합니다. 바꾸다

a= $(stat -c "%a" "$F")

그리고:

a=$(stat -c "%a" -- "$F")

(또한 --명령이 로 시작하는 파일 이름에 대해 계속 작동하도록 옵션 구분 기호를 추가하십시오 -)

또는

a=$(stat -Lc "%a" -- "$F")

심볼릭 링크의 경우 심볼릭 링크 대상에 대한 권한이 필요합니다(대부분의 시스템에서 심볼릭 링크 자체에 대한 권한은 관련이 없기 때문입니다).

간단하게 유지하기 위해 stat단일 파일에 대해 명령을 실행한 다음 대화형 명령줄에서 이 작업을 수행합니다.

$ stat -c "%a" file
660

이제 공백을 사용하여 명령을 시도해 보겠습니다.

$ a= $(stat -c "%a" file)
bash: 660: command not found
$ echo a=$a
a=

오류 메시지가 표시되고 a새 값으로 설정되지 않았습니다. (귀하의 경우와 같이 abefore 에 할당된 경우 1변경되지 않은 상태로 유지됩니다 1.) 이제 공백 없이 시도해 보세요.

$ a=$(stat -c "%a" file)
$ echo a=$a
a=660

이것은 작동합니다. a명령에서 반환된 숫자로 성공적으로 설정되었습니다 stat.

관련 정보