Sto cercando di vedere se esiste un valore in un array bash. Se è così, fai qualcosa. Altrimenti, fai qualcos'altro.
Non riesco a capire perché questo non vada sempre a buon fine.
Fondamentalmente inizia con due valori separati, concatenali con un delimitatore, cerca in un array e se l'intera stringa (delimitatore e tutti) si trova in uno qualsiasi degli elementi dell'array fa qualcosa, altrimenti fai qualcos'altro.
#!/bin/bash
FNAME="JACK"
LNAME="BLACK"
SEARCHNAME=()
SEARCHNAME+="JACK-BLACK"
SEARCHNAME+="JOHN-JAMES"
SEARCHNAME+="CHRIS-TOPHER"
SEARCHNAME+="JEN-NAY"
NAME="${FNAME}-${LNAME}"
if [[ $NAME == *"${SEARCHNAME[@]}"* ]]; then
echo "PASSED"
else
echo "FAILED"
fi
echo "SEARCH IN: ${SEARCHNAME[@]}"
echo "FOR NAME: ${NAME}"
risultati:
FAILED
SEARCH IN: JACK-BLACKJOHN-JAMESCHRIS-TOPHERJEN-NAY
FOR NAME: JACK-BLACK
Ho anche provato, if [[ "${NAME}" == *"${SEARCHNAME[@]}"* ]]
ma nessuna differenza ... Mi manca qualcosa di abbastanza ovvio qui e sto pensando che potrebbe essere con il modo in cui sto dichiarando il mio array? Mi aspetto che la mancanza di spazio tra ogni elemento dell'array (visto nell'output dell'array) non faccia la differenza a causa dei caratteri jolly?
#!/bin/bash FNAME="JACK" LNAME="BLACK" SEARCHNAME=() SEARCHNAME+=("JACK-BLACK") SEARCHNAME+=("JOHN-JAMES") SEARCHNAME+=("CHRIS-TOPHER") SEARCHNAME+=("JEN-NAY") NAME="${FNAME}-${LNAME}" if [[ "${NAME}" == *"${SEARCHNAME[@]}"* ]]; then echo "PASSED" else echo "FAILED" fi echo "SEARCH IN: ${SEARCHNAME[@]}" echo "FOR NAME: ${NAME}" echo "ELEMENT COUNT: ${#SEARCHNAME[@]}"
RisultatiFAILED SEARCH IN: JACK-BLACK JOHN-JAMES CHRIS-TOPHER JEN-NAY FOR NAME: JACK-BLACK ELEMENT COUNT: 4
echo "There are ${#SEARCHNAME[@]} members of the array"
alla fine dello script. Indica il1
membro. I+=
compiti dovrebbero apparire comeSEARCHNAME+=("JACK-BLACK")
.