printf
não pode interpretar caracteres de barra invertida (como \t
) na sequência impressa. Apenas na string de formato:
$ printf '\t%s' "test" "string"
test string
Como solução alternativa, você pode inserir uma guia real na string para imprimir.
É possível usar uma string de formato de %b
que poderia interpretar caracteres de barra invertida:
$ printf '%b' "\ttest" "\tstring"
test string
O caractere !
é usado para expansão do histórico. Mas isso só acontece quando usado sem aspas. Apenas citá-lo (com \
ou '
não "
) deve impedir a expansão. Se isso ainda for um problema, a expansão do histórico pode ser desativada:
$ set +H
Isso deve funcionar:
$ printf "%b\n" \
"public class {" \
"\tpublic static void main(String[] args) {" \
"dogBark()" \
"}" \
"public static void dogBark() {" \
"System.out.println(\"Woof\!\")" \
"}" \
"}" > barkingDog.java
$ cat barkingDog.java
public class {
public static void main(String[] args) {
dogBark()
}
public static void dogBark() {
System.out.println("Woof!")
}
}
Mas, claramente, um documento aqui é mais simples:
$ cat <<\EOT >barkingDog.java
public class {
public static void main(String[] args) {
dogBark()
}
public static void dogBark() {
System.out.println("Woof!")
}
}
EOT