shell/bash/sh/에서 특수 문자가 포함된 변수를 저장하고 인쇄하는 방법

shell/bash/sh/에서 특수 문자가 포함된 변수를 저장하고 인쇄하는 방법

기본적으로 프로그램 매개변수가 포함된 변수를 다양한 형식으로 여러 번 로드, 저장 및 다시 로드해야 합니다.

문제는 이 변수는 시작 부분에 "-" 기호가 포함되어 있기 때문에 일반 변수로 간주할 수 없다는 점입니다. 내용을 볼 수 있도록 인쇄하거나 로드하면 \\사용 여부를 결정하기 전에 처음에 지속적으로 필요하기 때문에 작업이 어려워집니다.

한 가지 비결은 항상 저장하는 것이지만 \\읽기 전에 echo $it유스 케이스의 변수로 마지막 출력을 읽었습니다.

이는 매우 비실용적이므로 변수의 내용을 저장하고 이를 실행하는 코드를 방해하지 않는 방법이 필요합니다.

다음 변수는 yadgdb에서 기본적으로 사용되지만 다른 프로그램에서도 사용할 수 있습니다.

예를 들어 내 컨텍스트에서 이와 같은 변수를 사용할 수 있는지 빠른 테스트printf 아니요printf 매개변수는 필요하지 않습니다. 이 때문입니다:

gdbParameters="-ex 'set pagination off' -ex 'set environment G_MESSAGES_DEBUG = all'"
printf $gdbParameters

반품:

printf: usage: printf [-v var] format [arguments]

다들 감사 해요.

답변1

요점은 printf변수를 직접 인쇄하는 데 사용하지 않고 형식을 전달한 다음 변수를 매개 변수로 전달한다는 것입니다.

$ gdbParameters="-ex 'set pagination off' -ex 'set environment G_MESSAGES_DEBUG = all'"
$ printf '%s\n' "$gdbParameters"
-ex 'set pagination off' -ex 'set environment G_MESSAGES_DEBUG = all'

변수를 사용하려는 코드를 방해하지 않는 방식으로 변수를 저장하는 것은 불가능합니다. 대신, 변수의 임의의 내용을 처리하기 위해 주의를 기울여 항상 훌륭하고 깔끔한 코드를 작성해야 합니다.

항상 변수를 인용하는 것과 같은 기본적인 모범 사례입니다(참조공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?그리고bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험--), 프로그램을 호출하고 변수를 입력으로 전달할 때 표준을 사용하여 옵션의 끝( )을 나타냅니다 e.g. grep -- "$variable" file.

답변2

쉘이 POSIX규정을 준수하거나(내장 명령인 경우 printf) 호출이 규정을 준수하는 경우 printf다음을 시도해 보십시오.

printf -- "$var"

이는 printf다음 매개변수가 옵션으로 해석되지 않도록 지시합니다.

$var그러나 일반적으로 콘텐츠의 백분율이나 백슬래시로 인해 출력이 예상하지 못한 방식으로 수정될 수 있다는 점을 명심하세요 . 이런 이유로,

printf "%s" "$var"

더 나은 솔루션입니다.

관련 정보