Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di untamed
    Registrato dal
    Sep 2004
    Messaggi
    830

    [Bash] problema con array

    Sto cercando di fare uno script e c'è un problema, penso stupido, che non riesco a risolvere.
    Concettualmente il problema è:
    ho un array
    codice:
    prova=(primo secondo terzo)
    vorrei, con un ciclo, avvertire quando trovo un determinato elemento, ad esempio:
    codice:
    for e in ${prova[@]};
     do
      if [ "$e"="secondo" ];
       then echo "secondo trovato";
      else echo $e;
      fi;
     done
    senonchè l'output è:
    secondo trovato
    secondo trovato
    secondo trovato

    VVoVe:

    Perchè?
    Ho trovato guide sul bash scripting che confermano il confronto tra variabili dell'if fatto in quel modo.
    "La fede in una missione divina è una delle tante forme di certezza che hanno afflitto la razza umana." - Bertrand Russell

  2. #2
    Devi spaziare l'operatore di confronto nell'if, così :
    codice:
    if [ "$e" = "secondo" ];
    Inoltre, è buona usanza dichiarare le stringhe in un array virgolettate :
    codice:
    prova=("primo" "secondo" "terzo")
    NeapoliX GNU/Linux
    "Alla maggior parte della gente piace leggere la propria scrittura e annusare l'odore dei propri peti." (Auden)

  3. #3
    Utente di HTML.it L'avatar di untamed
    Registrato dal
    Sep 2004
    Messaggi
    830
    Grazie, era proprio la spaziatura, sinceramente non ci avrei pensato. Ma quindi, nel caso dei confronti, è necessario sempre spaziare? Nelle assegnazioni ho notato che non è così.

    "La fede in una missione divina è una delle tante forme di certezza che hanno afflitto la razza umana." - Bertrand Russell

  4. #4
    E' necessario spaziare perchè in pratica per la bash anche la "[" è un comando (infatti se in una shell fai tab 2 volti e premi "y" la vedi all'inizio della lista).
    Mi pare che infatti al posto della parentesi si possa usare il comando "test"

  5. #5
    Utente di HTML.it L'avatar di untamed
    Registrato dal
    Sep 2004
    Messaggi
    830
    Si, infatti hai ragione, la parentesi quadra equivale a "test" ma gli spazi che mi ha fatto notare PinguinoGoloso, e che ho aggiunto, sono tra la variabile e "="...
    "La fede in una missione divina è una delle tante forme di certezza che hanno afflitto la razza umana." - Bertrand Russell

  6. #6
    Originariamente inviato da untamed
    Si, infatti hai ragione, la parentesi quadra equivale a "test" ma gli spazi che mi ha fatto notare PinguinoGoloso, e che ho aggiunto, sono tra la variabile e "="...
    Perchè le due variabili e l'operatore (= in questo caso) sono i parametri da passare al comando "test" e quindi, come tutti i parametri, vanno separati da spazi.
    L'assegnazione invece è un'operazione interna alla bash.

  7. #7
    Utente di HTML.it L'avatar di untamed
    Registrato dal
    Sep 2004
    Messaggi
    830
    Ok, chiaro. Grazie.

    "La fede in una missione divina è una delle tante forme di certezza che hanno afflitto la razza umana." - Bertrand Russell

  8. #8

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.