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에 변수로 전달하는 방법이 있습니까?
답변1
변수는확장하다쉘이 명령을 실행하기 전, 즉 printf
여기서는 변수 확장 후에 토큰화가 발생합니다. 스칼라 변수 대신 배열을 사용하십시오.
values=('some spaced words' other values)
printf %-20s "${values[@]}"