터치 명령을 사용하여 Linux에서 \*\\'"Best School"\'\\*$\?\*\*\*\*\*:)이라는 파일을 만드는 방법 [닫기]

터치 명령을 사용하여 Linux에서 \*\\'"Best School"\'\\*$\?\*\*\*\*\*:)이라는 파일을 만드는 방법 [닫기]

나는 한동안 이러한 문제를 겪고 있습니다. 나는 다양한 것을 시도했지만 소용이 없었습니다.

답변1

here-document(here-doc의 내용을 문자 그대로 이해할 수 있도록 여기에 구분 기호를 인용함)를 사용하여 .입력하는 것이 더 쉽습니다 .

xargs -d'\n' touch -- << '.'
\*\\'"Best School"\'\\*$\?\*\*\*\*\*:)
.

(여기서 GNU를 가정 xargs) 또는:

touch -- "$(cat << '.'
\*\\'"Best School"\'\\*$\?\*\*\*\*\*:)
.
)"

그리고 ksh또는 zsh,

touch -- "$(<< '.'
\*\\'"Best School"\'\\*$\?\*\*\*\*\*:)
.
)"

또한 유효하며 mksh효과적으로 최적화로서 여러 줄 인용 형식으로 간주될 수 있습니다. 바라보다Bash의 파일 읽기 명령 대체 이해더 알아보기.

rc또는 파생물 또는 zsh그 이후 set -o rcquotes:

touch '\*\\''"Best School"\''\\*$\?\*\*\*\*\*:)'

이름을 작은따옴표로 묶고 작은따옴표를 이스케이프하면 됩니다 ''.

답변2

간단히

touch "\\\*\\\\'\"Best School\"\\'\\\\\*\$\\\?\\\*\\\*\\\*\\\*\\\*:)"

파일 이름은 따옴표와 백슬래시 사용을 알고 있음을 나타내므로 이 작업은 쉬울 것입니다. 그러나 일반적인 이름을 사용하는 것이 더 나을 것이므로 프로세스/워크플로를 다시 생각해 보십시오.

답변3

sh예를 들어 호환 가능한 셸 에서는 bash전체 문자열을 작은따옴표로 묶은 다음 각 내부 작은따옴표를 '\''( 또는 )로 바꿉니다.'"'"'

touch -- '\*\\'\''"Best School"\'\''\\*$\?\*\*\*\*\*:)'

각 내부 시퀀스는 '\''일시적으로 외부 작은따옴표 문자열을 분리하고 이스케이프된 작은따옴표를 삽입한 다음 작은따옴표 문자열을 계속합니다.

작은따옴표로 묶인 문자열에는 작은따옴표를 포함할 수 없기 때문에 이는 필요합니다.

여기에 참조된 문서를 사용할 수도 있습니다.

touch -- "$(cat <<'END_NAME'
\*\\'"Best School"\'\\*$\?\*\*\*\*\*:)
END_NAME
)"

cat이는 여기에서 문서 리디렉션의 문자열을 전달하는 데 사용됩니다 . 문서(이 경우 한 줄)는 명령 대체의 결과로 전달되며 'END_NAME'초기 문서 구분 기호( )에 대한 참조로 인해 문서가 확장에 작용하는 것을 방지하므로 쉘은 해당 내용을 방해하지 않습니다.

(어쨌든 예제 문자열에는 유효한 확장이 없지만 여기에 문서를 인용하면 일반 문자열에서 변수나 명령 대체처럼 보이는 확장을 피할 수 있습니다.)

답변4

올바른 파일 이름을 인쇄하는 변수가 있는지 확인하십시오. 그런 다음 변수를 터치합니다. 이 명령을 사용하기 전에 파일 이름을 얻기 위해 필요한 만큼 printf를 사용할 수 있습니다 touch.

$ var='\*\\'\''"Best School"\'\''\\*$\?\*\*\*\*\*:)'

$ printf '%s\n' "$var"
\*\\'"Best School"\'\\*$\?\*\*\*\*\*:)

$ touch "$var"

아마도:

$ var=$'\*\\\\\'"Best School"\\\'\\\\*$\\?\\*\\*\\*\\*\\*:)';echo "$var"
\*\\'"Best School"\'\\*$\?\*\*\*\*\*:)

또는 변수 내에서 올바른 값을 얻는 다른 방법.

관련 정보