Parece que você deseja que a saída de erro vá para um arquivo específico, dependendo de um dos argumentos da sua função. Para isso, você não precisa de duas variáveis separadas:
if [[ "$1" == "btic" ]]; then
err="$data/${tbl}_btic_err"
elif [[ "$1" == "kline" ]]; then
err="$data/${tbl}_kline_err"
fi
ou apenas
err="$data/${tbl}_${1}_err"
Em seguida, chame jq
:
jq . <"$1" 2>"$err"
Eu notei vários problemas com o seu código e tentei classificá-los abaixo:
#!/bin/bash
valcurl () {
if [ "$1" != 'btic' ] && [ "$1" != 'kline' ]; then
echo 'first argument has to be btic or kline' >&2
return 1
fi
if [ -z "$2" ]; then
echo 'second argument must not be empty' >&2
return 1
fi
datadir=/home/data
datafile="$datadir/${2}_$1"
err="${datafile}_err"
if jq . <"$datafile" 2>"$err"; then
echo 'correct'
else
echo 'contains error'
fi
}
valcurl "$1" "$2"
Eu assumi que é o arquivo de dados construído usando o primeiro e o segundo argumento que você deseja enviar através de jq
e que você deseja verificar o status de saída de jq
para falhas. jq
falharia se $datafile
não fosse um arquivo JSON válido.
Eu também reduzi o código um pouco, não criando variáveis separadas para cada variação de $1
e, em seguida, adicionei alguma validação dos argumentos.