라는 파일을 만들어야 합니다.*'test'*
내가 쓴다면touch \'test\'
ls
프로그램'test'
하지만 내가 쓴다면touch \*\'test\'\*
ls
지금 보여줘*'\''test'\''*
어떤 팁이 있나요? 누군가 내가 뭘 잘못하고 있는지 설명할 수 있나요?
내 운영 체제는 Ubuntu 20.04입니다.
답변1
문제는 GNU ls
가도움이 되는모호하지 않은 인용 형식으로 이상한 파일 이름을 출력합니다. 이는 셸에 입력하여 동일한 이름을 얻는 방법과 유사합니다.
때로는 도움이 되지만 때로는 혼란만 가중시킬 뿐입니다. 이 기능을 끄려면 제어 환경 변수를 설정하십시오.
export QUOTING_STYLE=literal
ls
또는 해당 명령줄 플래그를 사용하세요.
ls --quoting-style=literal
또는 더 짧습니다 ls -N
.
다음을 인용하여 이상한 문자가 포함된 파일 이름을 만들 수 있습니다.
touch "*'test'*" # « *'test'* »
쉘이 명령줄을 실행하기 전에 인용된 문자열을 처리하기 때문에 다양한 유형의 따옴표가 있는 문자열이 인접할 수 있다는 점을 기억하십시오(여기서는 작은 따옴표로 묶인 문자열과 큰 따옴표로 묶인 문자열이 있음).
touch 'Quotes "here" at'" 5 o'clock" # « Quotes "here" at 5 o'clock »
# '←-first-string-→'"←-second-→"
귀하의 예:
touch \'test\' # « 'test' »
touch \*\'test\'\* # « *'test'* »
ls -1 --quoting-style=literal # List files one per line
*'test'*
'test'
답변2
내가 쓴다면
touch \'test\'
ls 디스플레이
'test'
아니요! 보여주다 "'test'"
.
하지만 내가 쓴다면
touch \*\'test\'\*
ls가 이제 표시됩니다.
*'\''test'\''*
아니요! 보여주다 '*'\''test'\''*'
.
최신 버전의 GNU ls는 Bourne 스타일 셸(bash, zsh 등, Fish와도 호환 가능하다고 생각함)에 입력할 수 있는 방식으로 파일 이름을 표시합니다. touch "'test'"
and를 사용하여 이러한 파일을 만들 수 있습니다 '*'\''test'\''*'
(물론 이를 참조하는 방법은 여러 가지가 있으며 다른 방법을 선택하는 데 문제가 없습니다).
ls
파일 이름을 인쇄하는 등 특수 문자를 표시하기 위해 다른 방법을 사용하도록 지시할 수 있습니다 ls --literal
(이름에 열 표시와 혼동될 수 있는 공백이 포함되어 있거나 이름에 개행 문자가 포함되어 있거나 그렇지 않은 경우와 같이 결과가 모호한 경우에도 마찬가지). -인쇄 가능한 문자). 바라보다선적 서류 비치--quoting-style
다른 스타일도 가능합니다.
답변3
일부 시스템에서는 ls
"특수" 문자가 포함된 파일 이름에 작은따옴표를 추가합니다. 바라보다이 문제더 알아보기.
최종 파일 이름에 작은따옴표를 원하므로 큰따옴표를 사용할 수 있습니다(디렉토리에 다른 파일이 없는 한). 내 Ubuntu 22.04에서는 예상대로 작동합니다.
touch "*'test'*"
ls --quoting-style=literal