체계:
- 우분투 22.04.3 LTS
- GNU bash, 버전 5.1.16(1)-릴리스(x86_64-pc-linux-gnu)
- ls(GNU coreutils) 8.32
상태:
$ touch "N'*"
$ ls
'N'\''*'
"GNU Coreutils - 파일 이름 인용" 상태:
"작은 따옴표가 있는 파일은 말도 안되는 방식으로 인쇄됩니다!" 이 문제는 버전 8.26에서 빠르게 해결되었습니다.
$ touch "Don't README.txt" $ ls-8.25 'Don'\''t README.txt' ## version 8.25 $ ls "Don't README.txt" ## version 8.26 and later
(bug22696#19)
질문: 위의 예와 내 파일 사이의 작은따옴표 처리의 차이점을 설명할 수 있는 사람이 있습니까?
답변1
이에 대해 몇 가지 테스트를 해보니 ls
파일 이름에 작은따옴표가 포함되어 있으면 작은따옴표 방식으로 돌아가는 것 같습니다.그리고공백 이외의 특수 문자입니다. 예를 들어:
$ cat fileNames
one space
one'quote
quote'and*
quote'and?
$ while IFS= read -r file; do touch "$file"; done < fileNames
$ ls
fileNames "one'quote" 'one space' 'quote'\''and*' 'quote'\''and?'
개발자들은 큰 따옴표를 사용할 때 실패할 수 있는 모든 이름을 포착하는 것이 너무 복잡하다고 판단하여 읽기는 더 어렵지만 복잡한 경우에는 쓰기 쉬운 작은 따옴표로 되돌렸습니다.
이 예제는 작동합니다(적어도 내 시스템에서는).
$ touch "Don't README.txt"
$ ls
"Don't README.txt"
다른 인용 스타일을 얻으려면 또 다른 특수 문자가 필요합니다.
$ touch "Don't README.*" "Don't README.txt"
$ ls
'Don'\''t README.*' "Don't README.txt"