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