Verificando cada item na matriz por substring [closed]

0

Estou construindo uma matriz a partir da saída de um comando. Cada linha de saída é um item na matriz. Estou interagindo com cada item e testando uma certa sequência de caracteres.

#!/bin/bash

readarray -t LST < <(#read in single or multiline output from command)
d="sometext:123"
SUBS=":$(echo $d | cut -d':' -f 2)"
for i in "${LST[@]}"
do
  if [[ $i == *"$SUBS"* ]]
  then
    #save $i in new variable
    exit 0
  fi
done
echo "no match"
exit 1

O problema parece ter algo a ver com a variável $ SUBS. Se eu ecoar $ SUBS com base no acima, ele gera: 123, mas a comparação aparentemente retorna falso. Se eu preencher o SUBS dessa maneira:

SUBS=":123"

A comparação parece funcionar como esperado. Com qualquer outro método de preencher $ SUBS que eu tentei, a comparação parece retornar false. O problema é que $ d pode não conter exatamente ": 123". Pode ser ": 456" ou algum outro número precedido por:.

    
por lightwing 22.12.2017 / 18:23

1 resposta

0

Usando a sugestão de Jeff Schaller para usar set -x (veja os comentários acima), na saída, encontrei uma linha similar a / bin / bash = / bin / ksh. Isso me levou a procurar no Google o que eu estava procurando com o comando ksh em vez do bash. Me deparei com este post:

como -fazer-você-dizer-se-uma-string-contém-outra-string-em-unix-shell-script

De acordo com a resposta aceita, mudei a minha linha para:

if test "${i#*$SUBS}" == "$i"

Isso parece resolver o problema que eu estava enfrentando.

    
por 22.12.2017 / 20:04