printf
aplica sua string de formato a cada argumento que a segue na saída. É um bash
shell embutido e pode ser usado para aplicar uma string delimitadora a uma lista de argumentos - tipo de.
Por exemplo:
printf %s:delimit: arg1 arg2 arg3
arg1:delimit:arg2:delimit:arg3:delimit:
A coisa é, printf
não para aplicar sua string de formato no final de seus argumentos, e o último recebe um delimitador anexado. Isso pode ser tratado em alguns casos:
printf %b:delimit: \0150 \0145 \0171\c
h:delimit:e:delimit:y
printf
interpreta C e octal escapa como %b
ytes com um determinado tipo de formato, e também com o formato %b
you \c
ut sua saída em um determinado ponto, e é por isso que printf
faz não siga o y acima com uma string :delimit:
, como a string de formatação indicaria.
Então, se você quiser que todo argumento literalmente interpretado e não seja um delimitador final, então você terá que resolver o problema dentro da própria lista de argumentos:
set -- arg1 arg2 arg3
for arg do shift
set -- "$@" :delimit: "$arg"
done; shift
printf %s "$@"
arg1:delimit:arg2:delimit:arg3