Se o objetivo for especificamente escrever uma nova linha e um x
(e outra nova linha?) para um arquivo,
sem que n
e x
apareçam consecutivamente (por exemplo, nx
)
em seu comando
(e sem incluir um espaço indesejado na sua saída),
uma abordagem muito simples é
{ echo; echo "x";} >> file
(para escrever nova linha, x
, nova linha) ou
{ echo; echo -n "x";} >> file
(para escrever nova linha e x
, mas nenhuma nova linha no final).
Você também pode usar parênteses em vez de chaves para agrupar:
(echo; echo "x") >> file
Note que, com chaves, você deve ter espaço em branco
(espaço (s), tabulação (s) e / ou nova (s) linha (s)) após a abertura {
,
e você deve ter um ;
(e / ou nova linha (s)) antes do fechamento }
.
Ou você pode fazer dois comandos totalmente separados (não agrupados)
que redirecionam de forma independente:
echo >> file
echo "x" >> file
Ou use a resposta de Jesse_b :
printf '\n%s\n' 'x' >> file
(para escrever nova linha, x
, nova linha) ou
printf '\n%s' 'x' >> file
(para escrever nova linha e x
, mas não há nova linha no final).
Mas se o objetivo é mais geral -
escrever um monte de seqüências de caracteres (sem espaços intervenientes),
enquanto os separa por espaços na linha de comando, considere
printf '%b' string …
em que %b
é o formato de conversão para imprimir uma string
com \
seqüências interpretadas (em contraste com %s
,
que imprime strings literalmente).
Por exemplo,
printf '%b' '\n' foo '\t' bar
irá escrever nova linha foo
guia bar
;
ou seja,
foo bar
(sem nova linha no final).
Você também pode dizer
printf '%b%b%b%b' '\n' foo '\t' bar
mas você não precisa;
o formato será aplicado quantas vezes forem necessárias
para exibir todos os argumentos.
Portanto, se você quiser adicionar uma nova linha no final,
printf '%b\n' '\n' foo '\t' bar
não funcionará; Ele adicionará uma nova linha após cada argumento.
Você pode fazer
printf '%b' '\n' foo '\t' bar '\n'
(adicionando uma nova linha como argumento final) ou
printf '%b%b%b%b\n' '\n' foo '\t' bar
(contando os argumentos), ou
{ printf '%b' '\n' foo '\t' bar; echo;}
Ainda outra abordagem , se você estiver usando o bash, é
printf '%s' $'\n' foo $'\t' bar
usando a notação $'text…'
do bash
interpretar sequências \
.
Aplicando isso à pergunta original, obteríamos
printf '%s' $'\n' x