printf 인용 문자열
Oct 02 2020
bash에서 테이블을 만들려고합니다. 모든 제목을 var에 수집했습니다. 그러나 "로 묶인이 문자열을 인쇄 할 때 printf 명령에 의해 하나가 아닌 새 열로 처리됩니다.
동일한 값을 직접 전달하면 제대로 작동하지만 대신 $ var를 사용하면 다른 동작이 발생합니다.
$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words other values
$ values='"some spaced words" other values' $ echo $values "some spaced words" other values $ printf '%-20s' $values; echo -e "\n"
"some spaced words" other values
내 변수가 어떻게 다른지에 대해 분명히 오해 < some string >하고 있으므로 다른 동작이 발생합니다.
변수를 사용할 때 출력 1과 일치하는 출력을 얻으려면 어떻게해야합니까?
편집 : var 버전에 따옴표가 있음을 알 수 있습니다-따옴표 문자열을 변수로 printf에 전달할 수있는 방법이 있습니까?
답변
7 choroba Oct 02 2020 at 19:08
쉘이 명령을 실행하기 전에 변수가 확장 됩니다. 즉 printf여기에서 단어 분할이 변수 확장 후에 발생합니다. 스칼라 변수 대신 배열을 사용하십시오.
values=('some spaced words' other values)
printf %-20s "${values[@]}"