abas na variável não funciona

0

Eu tenho essas linhas que vou inserir em um e-mail chamado "cabeçalho".

header="
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
"

Infelizmente, o \t não funciona como eu esperava. Eu até tentei colocar o \t entre esses dois '' .

Em seguida, coloco esse $header no e-mail automático.

mailx -s "$subject" -r "$from" "$to" <<-eof
$header

$body

$footer
eof
}
    
por cube00 16.06.2015 / 10:24

4 respostas

0

Use o \n para adicionar novas linhas ao seu cabeçalho:

header="------------------------------------- \ nName \ tAge \ tGender \ tAddress \ n ------------------------------------- \ n "

Em seguida, use por exemplo echo -e $header para exibir:

echo -e $header
-------------------------------------
Name    Age Gender  Address
-------------------------------------

Se echo -e não funcionar, use printf . Se sua saída começar com traços, chame printf -- "$header" para informar printf para interpretar a variável completa como saída, em vez de tentar analisá-los como argumentos.

Após mais testes, a variável original também funciona com printf:

header="
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
"

printf -- "$header"

-------------------------------------
Name    Age     Gender  Address
-------------------------------------

Para usar isso em mailx , você pode usar:

mailx -s "$subject" -r "$from" "$to" <<eof
$header
$body
$footer
eof
    
por 16.06.2015 / 10:37
2

Se você usa strings ANSI:

header=$'
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
'

você tem a tradução correta de qualquer caractere de escape ANSI que já esteja na sua variável. (Observação: os caracteres de nova linha também podem ser definidos como \n , mas isso não aumentaria a legibilidade no seu caso, portanto, eu manteria seu formato original como também descrito nesta resposta).

Existe também a possibilidade de permitir que outras ferramentas façam a conversão em todos os locais em que são usadas (enquanto a string ainda contém a representação textual); exemplos para isso são: Usando echo -e (se sua versão de echo suporta essa opção), ou usando a variável como formato string em printf onde escapes também serão interpretados, como em: printf "$header" .

Discussão: Usar printf tem a vantagem de ser o padrão POSIX. O uso de strings ANSI tem a vantagem de a conversão estar presente de forma consistente na variável e não requer interpretação adicional.

Como (como mostra a pergunta atualizada) a variável será usada no contexto de um programa ( mailx ) que não fará interpretação de caracteres com escape a variável precisa já conter a formatação apropriada; portanto, usar as (com ksh93 no AIX) parece ser a solução apropriada. Para uma solução de conformidade padrão, você também pode atribuir novamente a variável usando printf , por exemplo: header="..." ; header=$( printf "$header" )

    
por 16.06.2015 / 10:28
0

Outra opção possível é usar o awk:

$ echo "Name Age Gender Address" | awk -F' ' '{ printf "%s\t%s\t%s\t%s\n", $1, $2, $3, $4 }'

produz:

Name    Age     Gender  Address

Ou usando o printf diretamente:

$ printf "%s\t%s\t%s\t%s\t\n" Name Age Gender Address

produz:

Name    Age     Gender  Address
    
por 16.06.2015 / 11:06
0

De man echo

Normally you could distinguish between a flag and a string that begins with a hyphen by using a (double hyphen). Since no flags are supported with the echo command, a (double hyphen) is treated literally.

E no segundo exemplo:

Note: You must put the message in quotation marks if it contains escape sequences. Otherwise, the shell interprets the \ (backslash) as a metacharacter and treats the \ differently.

E, de fato, no AIX:

~> header="
-------------------------------------
Name\tAge\tGender\tAddress
-------------------------------------
"

~> echo -e $header
-e ------------------------------------- Name   Age     Gender  Address -------------------------------------
~> echo "$header"

-------------------------------------
Name    Age     Gender  Address
-------------------------------------
    
por 16.06.2015 / 11:19