printf에서 대시 사용

printf에서 대시 사용

printf문자열에서 대시를 사용하는 방법은 무엇입니까 ?

x=xxx
printf -v args "-x=%s" "$x"
printf "$var"

하지만 오류가 발생합니다.

./tmp.sh: line 2: printf: -x: invalid option
printf: usage: printf [-v var] format [arguments]

이것이 선택이라고 printf설명되는 것은 알지만 어떻게 극복할 수 있을까요?-x

예 를 printf들어 명령줄 인수에 해당하는 문자열을 만드는 데 사용합니다 .-x=xxx -y=yyy -z=zzz

eval $tool args

답변1

printf기존 옵션 종료 매개변수 지원 --:

$ printf -- '-x\n'
-x

답변2

대시를 문자 그대로 처리 --하려면 끝에 options() 인수를 사용할 수 있습니다 .printf

printf -v var -- '-x=%s' "$x"

산출:

$ x=xxx && printf -v var -- '-x=%s' "$x" && echo $var
-x=xxx

답변3

옵션을 사용하는 것 같으 므로 printf형식 문자열을 사용하여 -x변수의 값과 값을 출력하십시오.

printf '%s=%s' '-x' "$x"

미리 생성된 명령줄을 사용하여 도구를 호출하려면 명령줄 매개변수를 문자열에 입력하지 마세요. set다음 값을 설정하는 데 사용됩니다 $@.

set -- -x="$x" -y="$y" -z="$z"

그런 다음 도구를 호출합니다.

tool "$@"

이렇게 하면 하나 이상의 값, 또는 에 공백이 포함된 경우에도 도구가 올바른 수의 인수를 가져오고 올바르게 인용되도록 할 $x$y있습니다 $z.

또는 bash배열을 사용하십시오.

args=( -x="$x" -y="$y" -z="$z" )

tool "${args[@]}"

관련 정보