이 질문은 올바르게 이스케이프 된 문자열 리터럴을 작성하는 방법에 관한 것이 아닙니다 . 스크립트 또는 다른 프로그램에서 직접 소비하기 위해 변수를 이스케이프 처리하는 방법에 관한 관련 질문을 찾을 수 없습니다.
내 목표는 스크립트가 다른 스크립트를 생성 할 수있게하는 것입니다. 생성 된 스크립트의 작업은 다른 컴퓨터 에서 0에서 n 번 까지 실행 되며 생성 된 데이터는 실행되기 전에 변경 될 수 있으므로 네트워크를 통해 직접 작업을 수행하기 때문입니다. 작동하지.
같은 작은 따옴표와 같은 특수 문자를 포함 할 수 있습니다 알려진 변수를 감안할 때, 나는 예를 들어 변수 완전히 탈출 문자열 리터럴로 그를 쓸 필요가 foo
포함 bar'baz
생성 된 스크립트로 표시되어야합니다 :
qux='bar'\''baz'
"qux=$foo_esc"
스크립트의 다른 줄 에 추가 하여 작성합니다 . 나는 Perl을 다음과 같이 사용했다.
foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
그러나 이것은 과도한 것으로 보입니다.
나는 bash만으로는 성공하지 못했습니다. 나는 이것들의 많은 변형을 시도했다.
foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
그러나 추가 슬래시가 출력에 나타나거나 (내가 할 때 echo "$foo"
) 구문 오류가 발생합니다 (쉘에서 수행하면 추가 입력이 예상 됨).
alias "varname=$varname" varname
또는var=value set
alias
및 / 또는set
상당히 보편적으로