Primeiro, sempre que você estiver usando o valor de uma variável, precisará escrever $line
.
Além disso, observe que read line
retira os espaços em branco inicial e final e permite a sequência de linhas invertidas-nova como uma continuação de linha. Para manter os espaços em branco, use IFS= read
. Para evitar tratar \
especialmente, use read -r
. Você pode combinar os dois como IFS= read -r
.
O que você quer testar exatamente? Se você quiser testar se a linha é exatamente $key
(exceto para espaço em branco, a menos que você use IFS= read
), use o operador ==
e coloque $key
entre aspas duplas.
if [[ $line == "$key" ]]; then …
Se você quiser testar se a linha contém $key
(por exemplo, se o valor de key
for fu*bar
, então hellofu*bar
e fu*barqux
corresponderão, mas fuubar
e gu*bar
don ' t), em seguida, use o operador ==
e, novamente, certifique-se de colocar $key
entre aspas duplas. O lado direito do operador ==
é um padrão curinga da shell; colocar a variável entre aspas faz com que seja tratada literalmente.
if [[ $line == *"$key"* ]]; then …
Se você quiser tratar $key
como um padrão de caractere curinga, se $key
for fu*bar
, a linha poderá ser fubar
ou fuqwebar
, mas não fbar
ou afubar
. fora das aspas duplas:
if [[ $line == $key ]]; then …
Se você quiser que apenas parte da linha corresponda, permitindo coisas como afubar
:
if [[ $line == *$key* ]]; then …
Use o operador de correspondência de expressões regulares =~
se quiser ter uma expressão regular estendida à direita lado de mão. Uma expressão regular pode corresponder a parte da linha; Se você quiser corresponder a linha inteira, coloque ^
no início da regex e $
no final. Por exemplo, [[ $line == *"$key"* ]]
é equivalente a [[ $line =~ "$key" ]]
, enquanto [[ $line == "$key" ]]
é equivalente a [[ $line =~ ^"$key"$ ]]
.