$ printf '%s\n' A B C D
A
B
C
D
O comando printf
, que é um comando interno na maioria dos shells, usa uma string de formatação contendo um ou vários marcadores de posição. A string %s
é o espaço reservado para "uma string" (que é o que você mais comumente tem no shell). Se houver mais argumentos dados para printf
, em seguida, há espaços reservados na seqüência de formato (como neste caso), a seqüência de formato inteiro será aplicada novamente até que a lista de argumentos seja esgotada. Como existe um \n
(newline) no final da string de formatação, você terá cada letra em sua própria linha.
Se você tiver a string em uma variável:
str='A B C D'
printf '%s\n' $str
Isso terá o mesmo resultado acima. A expansão $str
não é citada, o que significa que o conteúdo da string será dividido nos espaços (os caracteres na variável IFS
serão usados para dividir a string em palavras, e essa variável contém por padrão um espaço, tabulação e uma nova linha). Observe que, se a cadeia contiver caracteres globbing de nome de arquivo, como *
, os nomes de arquivos correspondentes a esses padrões serão gerados. Ao definir a opção noglob
shell (com set -f
ou set -o noglob
), você pode evitar isso:
str='A B C D *'
set -f
printf '%s\n' $str
set +f