si los argumentos son iguales a esta cadena, defina una variable como esta cadena
Estoy haciendo un script bash y ahora tengo una llamada de variable source
y una matriz llamada samples
, como esta:
source='country'
samples=(US Canada Mexico...)
Como quiero ampliar el número de fuentes (y cada fuente tiene sus propias muestras), intenté agregar algunos argumentos para hacer esto. Probé esto:
source=""
samples=("")
if [ $1="country" ]; then
source="country"
samples="US Canada Mexico..."
else
echo "try again"
fi
pero cuando ejecuté mi script source countries.sh country
no funcionó. ¿Qué estoy haciendo mal?
No te olvides de los espacios:
source=""
samples=("")
if [ $1 = "country" ]; then
source="country"
samples="US Canada Mexico..."
else
echo "try again"
fi
Puede utilizar los operadores " =
" o " ==
" para comparar cadenas en bash. El factor importante es el espacio entre corchetes. El método adecuado es que los corchetes contengan espacios dentro y los operadores contengan espacios alrededor. En algunos casos funcionan diferentes combinaciones; sin embargo, lo siguiente pretende ser un ejemplo universal.
if [ "$1" == "something" ]; then ## GOOD
if [ "$1" = "something" ]; then ## GOOD
if [ "$1"="something" ]; then ## BAD (operator spacing)
if ["$1" == "something"]; then ## BAD (bracket spacing)
Además, tenga en cuenta que los corchetes dobles se manejan de manera ligeramente diferente en comparación con los corchetes simples...
if [[ $a == z* ]]; then # True if $a starts with a "z" (pattern matching).
if [[ $a == "z*" ]]; then # True if $a is equal to z* (literal matching).
if [ $a == z* ]; then # File globbing and word splitting take place.
if [ "$a" == "z*" ]; then # True if $a is equal to z* (literal matching).