ls 출력에는 "N'*"이라는 파일이 "N'\''*"로 표시됩니다.

ls 출력에는 "N'*"이라는 파일이 "N'\''*"로 표시됩니다.

체계:

  • 우분투 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"

관련 정보