1 Laatst bewerkt door MeneerJansen (03 Mar 2017 23:06:12)

Onderwerp: Bevat een array met getallen mijn getal?

Ik wordt volstrekt knettergek van het volgende. Ik ben een shell script aan het schijven. Ik heb een rij getallen en wil kijken of mijn variabele in die rij staat. Dit is de rij (array):

array=(9 10 11 12 13 14 15)

Nu wil ik weten of bijv. 10 er in staat. En dat getal staat er WEL in zoals wij mensen zien. Let op:

!# /bin/bash

array=(9 10 11 12 13 14 15)
number="10"

if
   [ $array == $number  ]
   then 
      echo "Number is $number and it is in the array"
   else
      echo "Number is $number and it is NOT in the array"
fi

De output:

The number is 10 and it is NOT in the array.

Waaaaaaaaaaaaaaaaaat? Ik ontdekte het volgende. Stel dat de rij getallen het nummer 9 NIET bevat, dus zo:

array=(10 11 12 13 14 15)

Dan werkt het wel! Als ik i.p.v. 9 het getal 09 neem (let op de leading zero) werkt het ook niet. En ook niet als ik alle getallen tussen aanhalingstekens zet. Is dit een bug of een feature?

Help want ik wordt hier echt gestoord van. Hoe kan dit nu?

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

2 Laatst bewerkt door peugeot2 (03 Mar 2017 23:15:39)

Re: Bevat een array met getallen mijn getal?

Volgens mij vraag je of de array gelijk is aan een getal.... array == getal. Volgens mij moet je vragen of de array het getal bevat (if number is in array). Dat is een heel andere vraag.

Zou zo kunnen.... http://jaytaylor.com/notes/node/1360360709000.html

3 Laatst bewerkt door MeneerJansen (04 Mar 2017 13:41:22)

Re: Bevat een array met getallen mijn getal?

peugeot2 schreef:

Volgens mij vraag je of de array gelijk is aan een getal.... array == getal. Volgens mij moet je vragen of de array het getal bevat (if number is in array). Dat is een heel andere vraag.

Zou zo kunnen.... http://jaytaylor.com/notes/node/1360360709000.html

Die heb ik geprobeerd (ben al de hele avond bezig) en ook daar het probleem met de 9. Alle tips die ik vind op het internet gaan over letters en woorden in een array. Kan nergens iets vinden met getallen en cijfers...

[edit] Wacht  even... Het 2e voorbeeld aldaar werkt wel.

Voorbeeld uit de link:

#! /bin/bash

array=(word "two words" words)
if [[ ${array[@]} =~ words ]]
   then
      echo "Checking"
      for element in "${array[@]}"
      do
         if [[ $element == "words" ]]
            then
               echo "Match"
         fi
      done
fi

Output:

Checking
Match

En nu met een rij cijfers en nummers, vrijwel het zelfde script:

#! /bin/bash

array=(9 10 11 12 13 14 15)
number="10"

if [[ ${array[@]} =~ $number ]]
   then
       echo "Checking"
       for element in "${array[@]}"
       do
           if [[ $element == "$number" ]]
              then
              echo "Number is $number and it is in the arrray."
           fi
       done
fi

Output:

Checking
Number is 10 and it is in the arrray.
Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Bevat een array met getallen mijn getal?

Ja, kijk... andere/goede aanpak!

5

Re: Bevat een array met getallen mijn getal?

Zo leer je wel veel.

Dan stap 3.
Een array qua inhoud sorteren.

Stap 2.
Listen. wink

Dan ben je heer en meester in de array's en lists met deze kleine oefeningen. smile

IF not THEN toch

Re: Bevat een array met getallen mijn getal?

Joris schreef:

Zo leer je wel veel.

Dan stap 3.
Een array qua inhoud sorteren.

Stap 2.
Listen. wink

Dan ben je heer en meester in de array's en lists met deze kleine oefeningen. smile

Ik blijf het ridicuul vinden dat een array anders wordt beken door Bash op het moment dat je er een getal van één cijfer tussen zet. Ik weet nog steeds niet of dat een bug is.

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....