{} no comando bash [duplicado]

0

Estou tentando usar esse comando na variável bash, mas recebo erro. Eu acho que isso aconteceu por causa do {} no comando, mas eu não sei como resolvê-lo.

O comando é:

add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"
Output="$( echo $some_csv_-var | ${add_Area})"

O erro é:

awk: 1: unexpected character '''  
fileawk: line 2: missing } near end of file
    
por Ravid 18.04.2018 / 23:24

1 resposta

2

Em geral, não é uma boa ideia incorporar um comando a uma variável e depois executar a variável. Você poderia usar uma função para isso.

Primeiro, vamos explicar o que está acontecendo e por que você está recebendo um erro. É tudo sobre a ordem de avaliação.

add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"

As aspas duplas em torno da string permitem que o shell avalie as variáveis. Nesse caso, o $1 é visto e processado pelo shell e é provável que seja não definido. Além disso, você está tentando colocar aspas duplas entre aspas duplas, o que na verdade significa que a seção com aspas duplas é interrompida e reiniciada um pouco mais tarde. A atribuição resultante se torna isso:

add_Area="awk -F\t '{=area FS ;}1' OFS='\t'"

Quando você tenta e executa isso na próxima linha, ele falha porque não está sintaticamente correto.

Agora vamos ver uma maneira de resolver o que eu acho que você está tentando alcançar.

# Declare a function
add_Area() {
    awk -F$'\t' 'BEGIN { OFS = FS } { $1 = "area" FS $1 } 1'
}

# Use the function as if it were a normal command
Output="$( echo "$some_csv_var" | add_Area )"

# Later
echo "$Output"
    
por 19.04.2018 / 00:19