Ayuda para un script simple
#!/bin/bash
array1=(
prova1
prova2
slack64
)
a="slack64"
b="ab"
if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi
Este script simplemente no funciona, quiero un script que compruebe si slack64 está presente en una lista (uso una matriz), y simplemente dame, sí está presente o no. No sé cómo comparar una matriz con una sola variable.
array1
trabajo?Respuestas:
Use un tipo diferente de matriz: en lugar de una matriz indexada con enteros, use una matriz asociativa, por lo que la clave (índice) es lo que estará buscando.
bash-4.0
o más tarde se requiere para esto.En lo anterior, realmente no nos importan los valores, solo necesitan estar no vacíos para esto. Puede "invertir" una matriz indexada en una nueva matriz asociativa intercambiando la clave y el valor:
Esto puede ser rentable si tiene matrices grandes que se buscan con frecuencia, ya que la implementación de matrices asociativas funcionará mejor que los bucles de recorrido de matrices. Sin embargo, no se adaptará a todos los casos de uso, ya que no puede manejar duplicados (aunque puede usar el valor como un contador, en lugar de solo 1 como arriba), y no puede manejar un índice vacío.
Desglosando la línea compleja de arriba, para explicar la "inversión":
fuente
La forma más directa es iterar con un bucle:
fuente
[[ a == aaa ]]
es falso pero una coincidencia aaa no?[ ]
: clase de caracteres (globs)[[ ]]
por lo que dijiste. ¿Has probado?Con
zsh
:fuente
Esta función funciona con matrices asociativas.
Podemos usar esta función para realizar una de las siguientes acciones:
- compruebe si la matriz tiene una clave determinada -----------------> inArray "myKey" $ {! myArray [@]} "
- verifique si la matriz contiene un cierto valor ---------> inArray "myValue" "$ {myArray [@]}"
fuente
También puedes usar grep para eso:
fuente
$a
, y no comience-
como se olvidó--
). Puede usar en%s\0
lugar de%s\n
usargrep --null
(suponiendo GNU grep o compatible) ya que las variables bash no pueden contener el carácter NUL de todos modos. También necesitaría manejar el caso de una matriz vacía especialmente (ya que ese comando printf imprimiría lo mismo que para una matriz con un elemento vacío). También tenga en cuenta que no necesita iniciar una subshell aquí.