u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE
결과 명령을 실행하는 대신 쉽게(예: 가능하면 이스케이프하지 않고) 인쇄하고 싶습니다.
bash와 같은 기본 Linux 쉘에서 이러한 종류의 테스트를 수행할 수 있는 내장 기능이 있습니까?
답변1
일반적인 경우를 처리하려면 변수를 인용하고 명령을 배열로 저장해야 합니다.
$ USER='foo bar' DATABASE='baz ban'
$ command=(u2api --zuser="$USER" --outfmtput=json SQL create_database name="$DATABASE")
$ printf '%q ' "${command[@]}"; echo # To get a newline at the end
u2api --zuser=foo\ bar --outfmtput=json SQL create_database name=baz\ ban
명령 배열을 실행하려면 다음을 수행하십시오.
"${command[@]}"
echo
이 명령은 매우 간단한 경우에 작동합니다.
echo u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE
이는 가장 간단한 솔루션이지만 확장에 공백(구체적으로 공백, 탭 또는 줄 바꿈)이나 이스케이프 문자와 같은 특수 문자가 포함되지 않은 경우에만 올바른 출력을 표시합니다. 예를 들어:
$ USER='foo bar'
$ echo u2api --zuser="$USER" --outfmtput=json SQL create_database name=$DATABASE
u2api --zuser=foo bar --outfmtput=json SQL create_database name=
사용자 이름 주위에 누락된 따옴표가 있는지 확인하세요. 공백이 포함된 따옴표가 없는 변수에서도 동일한 문제가 발생합니다.