echo $'hi\nhi' > /etc/list.list가 작동하지 않습니다

echo $'hi\nhi' > /etc/list.list가 작동하지 않습니다

echo $’hi\nhi’ > /etc/list.listKali Linux 2020.4 Live USB에서 여러 명령이 포함된 실행 가능한 스크립트 텍스트 파일을 생성 하는 경우 :

  1. $파일 텍스트에 포함되고 ’’기호 2개가 사라집니다.

  2. hi2를 서로 분리하는 새 선을 만들 수 있는 방법은 없으며 단지 \n분리가 전혀 표시되지 않을 뿐입니다.

그러나 실행 파일 외부나 일반 터미널에서 동일한 명령을 사용하면 작동합니다.

Kali 2020.4는 2020.3에서 변경되어 완벽하게 작동하므로 실행 가능한 텍스트 파일에서 에코 형식을 사용할 수 없습니까? echo1줄 명령 내에서 새 줄을 만드는 데 사용할 수 있는 다른 명령이 있습니까?

답변1

명령에 여러 가지 문제가 있습니다. 다행히 모두 쉽게 해결할 수 있습니다.

  1. ~처럼콰지모도문자열을 구분하는 데 유효한 문자가 아닌 것이 의견에 언급되어 있습니다.본 아이덴티티 쉘(Kali Linux의 기본 쉘 인터프리터인 "BASH"라고도 함) 작은따옴표( ')나 큰따옴표( ) 로 바꿔야 합니다 . "여기에 좋은 정보가 있습니다BASH에서 참조됨.

  2. "를 사용하려고 합니다.이스케이프 시퀀스“귀하의 echo명령 내에는 있지만 -e깃발은 없습니다.

  3. 당신의 사실을 바탕으로아니요$달러 기호 문자( )를 출력에 포함시키려는 경우 "를 수행하려는 것처럼 보입니다.매개변수 확장"또는 (예:강철 드라이버주석에서)는 [ANSI 인용 문자열](https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html).

ANSI가 인용한 GNU BASH 문서에 따르면:

$'string' 형식의 단어는 특별하게 처리됩니다. 단어는 ANSI C 표준에 지정된 대로 대체된 백슬래시 이스케이프 문자를 사용하여 문자열로 확장됩니다. 백슬래시 이스케이프 시퀀스(있는 경우)가 디코딩됩니다.

이 답변에서는 이스케이프 시퀀스를 이해하는 것이 중요한 차이점입니다. 쉘 확장이 발생하는 위치를 선택할 수 있습니다: 실행 단계echo 또는ANSI 따옴표를 사용할 때. 어떤 경우에는 echo원하는 효과를 얻기 위해 이러한 유형의 확장을 지정하는 작업을 외부에서 수행해야 하기 때문에 이러한 구분이 이루어집니다 . 더 깊이 생각한 후에 awk이 문제를 본 도구가 생각났습니다 .

필드 구분을 위해 백슬래시 또는 작은따옴표 사용

일반적으로 말하면 "뉴비 트랩 - 변수BASH Hackers wiki 섹션, 특히 "변수 설정" 및 "변수 확장(사용)" 하위 섹션을 참조하세요.

이는 BASH 자체의 기본 구문 문제이며 사소한 Kali 버전 업데이트의 영향을 받지 않습니다.

편집: 포함할 3a/3b의 분류를 추가했습니다.강철 드라이버의 의견.

관련 정보