if [ "$VAR1"| cut -c 7-18 = "GHIJKLMN.csv" ]; then
O que isto faz é executar [ "$VAR1" e canalizar a saída para cut -c 7-18 = "GHIJKLMN.csv" ] . [ falhará porque exige que seu último argumento seja ] e cut falhará porque provavelmente nem = nem ] são arquivos.
Vou adivinhar o que você queria:
if [ "$(echo "$VAR1" | cut -c 7-18)" = "GHIJKLMN.csv" ]; then
Observe como eu envolvo o comando em "$()" . Isso faz com que ele execute e substitua seu lugar pela saída. As cotações são importantes, portanto, a saída não é dividida em vários argumentos para [ .
Seguindo o que acredito serem as práticas recomendadas para o bash, recomendo que você faça isso:
if [[ "$(cut -c 7-18 <<< "$VAR1")" = "GHIJKLMN.csv" ]]; then
Isso evita interpretação especial de $VAR1 por echo (dependendo do conteúdo, pode ser confundido com opções) e chamando 2 executáveis desnecessários, [ e echo . Algo especial para notar aqui é que você realmente não precisa de nenhuma das aspas que usei. [[ é uma sintaxe especial do bash, e mesmo se a substituição tivesse espaços, o bash não dividiria a palavra. Também não dividiria o que foi dado a <<< . GHIJKLMN.csv não tem nenhum espaço em branco ou caracteres especiais, por isso também seria bom. Em caso de dúvida, é um bom hábito citar tudo.
Você também pode ter pulado a chamada para cut ao fazer isso:
if [[ "${VAR1:6:12}" = "GHIJKLMN.csv" ]]; then
Agora, tudo é feito no bash sem executar nenhum outro programa. Nessa sintaxe, em vez de fornecer o intervalo de caracteres desejado, como você fez com cut , você fornece o deslocamento com base em 0 para o primeiro caractere e o número de caracteres que deseja. Isso é 7 - 1 porque os índices de cut começam com 1 e 12 porque o intervalo 7-18 é inclusivo, então 18 - 7 + 1.
Acabei de ver, seu $VAR1 é "ABCDEFGHIJKLMN.csv" . Desde que você cortou até o final, você realmente não precisa especificar a contagem:
if [[ "${VAR1:6}" = "GHIJKLMN.csv" ]]; then