Eu tenho este shellcheck
aviso que não consigo descobrir:
In /mnt/e/bin/iconic line 540:
printf "FALSE|" >> "$IconsRaw" # Select field number 1
^-- SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects.
Percebi que muitos de nós aqui usamos shellcheck para corrigir nossos scripts bash / comandos shell, então espero que a pergunta esteja no tópico.
De acordo com os comentários postando a seção relevante do script bash:
if [[ "$X" == "?" || "$Y" == "?" ]] ; then
: # Bad X or Y offset usually "Link to Name.ext~" (backup name)
else
let i++
printf "FALSE|" >> "$IconsRaw" # Select field number 1
printf "%s|" "$i" >> "$IconsRaw" # 2
printf "%s|" "${File##*/}" >> "$IconsRaw"
printf "%s|" "$Linkless" >> "$IconsRaw" # 4
printf "%s|" "$Date" >> "$IconsRaw" # 5
printf "%s|" "$X" >> "$IconsRaw" # 6
echo "$Y" >> "$IconsRaw" # 7
fi
Solução
Graças a respostas e comentários aceitos, aprendi que shellcheck
não apenas detecta erros em seu código, mas também sugere melhorias de desempenho. Nesse caso, o nome do arquivo $IconsRaw
estava sendo aberto e fechado várias vezes com cada printf
e echo
.
O código bash mais eficiente:
# X,Y screen coordinates invalid on backup files ending with "~"
! [[ "$X" == "?" || "$Y" == "?" ]] && { let i++; echo \
"FALSE|$i|${File##*/}|$Linkless|$Date|$X|$Y" >> "$IconsRaw"; }
Presumo que seu script tenha várias instâncias de
>> "$IconsRaw"
. Essa mensagem sugere redirecionar a saída apenas uma vez e agrupar os comandos em um subshell. Presumivelmente para evitar a sobrecarga de abrir e fechar o arquivo várias vezes.Então, em vez disso:
Este:
Mas isso também é uma repetição desnecessária
printf
e é mais eficiente apenas fazer: