Comparação de várias cadeias no Bash

0
    ROOTPATH="/path/here"
    p1 = "file1"
    p2 = "file2"

    for file in 'find $ROOTPATH type f'; do
    if [["$file" =~ $p1]]; then
      echo 'got p1'
    elif [["$file" =~ $p2]]; then
      echo 'got p1'
    else

    echo 'got nothing'

Isso falha e não sei por quê. Tanto $p1 como $p2 são strings, e o mesmo é arquivo.

Estou tentando fazer uma comparação em (2) strings para ver se $p1 ou p2 existem em $file em duas condições separadas.

O que estou fazendo de errado?

    
por john jones 16.10.2017 / 17:55

2 respostas

2

Você está sem a sintaxe obrigatória para usar o operador "search-by-type" de find :

for file in $(find "$ROOTPATH" -type f); do

Sua atribuição das variáveis p1 e p2 está sintaticamente incorreta:

p1="file1"    # Assigns the value 'file1' to the variable p1
p1 = "file1"  # Attempts to execute 'p1' with arguments '=' and 'file1'

Além disso, as duas declarações echo são idênticas, você pode querer alterar o comando echo do segundo caso, dependendo do seu caso de uso.

Além disso, a sintaxe de suas instruções if é falha; um caractere de espaço em branco ou um separador de comando é necessário antes e depois dos [[ e ]] tokens.

    
por 16.10.2017 / 18:03
0

Apenas corrigindo a sintaxe

ROOTPATH="/path/here"
p1="file1"
p2="file2"

for file in 'find $ROOTPATH -type f'; 
do
    if [[ $file =~ $p1 ]]; 
    then
        echo "got p1"
    elif [[ $file =~ $p2 ]]; 
    then
        echo "got p2"
    else
        echo "got nothing"
    fi
done

Arranjo

  • Removendo espaços na atribuição de variáveis
  • -type em vez de type
  • Removido " na variável $file devido a [[ usage
  • Espaço adicionado ( [[ $file & p1 ]] )
  • Adicionando fi & done terminações

Como comentado nos comentários, fique atento ao loop com o comando find .

    
por 16.10.2017 / 18:30

Tags