pregunta de bash sobre si y luego

pregunta de bash sobre si y luego

Estoy escribiendo esto en mi guión. Tiene otras partes pero me quedo atascado solo en esta parte.

if [[$# == $year $month $day  ]] ; then
    cal $day $month $year
fi

Cuando ejecuto esto me da este mensaje:

[[3: command not found

Entonces, ¿cuál es el problema? ¿Es una sintaxis o un comando real?

Aquí está el resto de mi guión si eso ayuda:

year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)

if [[$# == $year $month $day  ]] ; then    
    cal $day $month $year
fi

Respuesta1

Debes poner un espacio después de los corchetes [[.

if [[ $# == $year $month $day ]] ; then    
    cal $day $month $year
fi

Además, como lo tienes escrito, eso no funcionará. Tienes comparar $#y $year $month $daycomo una cadena, o algo completamente distinto. Tal vez:

if [[ "$#" == "$year$month$day" ]] ; then    
    cal $day $month $year
fi

Respuesta2

Hay bastantes problemas con esto.

  1. Necesitas un espacio después de [[:

    [[ $# == $year $month $day ]]
    
  2. $#no es lo que crees que es. Es el número de argumentos pasados ​​a un script o función. Parece que crees que en realidad es la lista de argumentos.

  3. ==compara cadenas, le estás dando una lista de tipos. Para comparar la lista de argumentos pasados ​​a su script con $day $month $year, haría algo como esto:

    [[ "$@" == "$day $month $year" ]]
    
  4. calno funciona de esa manera. Mi calno funciona de esa manera peroaparentementealgunas versiones más nuevas lo hacen. No tengo idea de lo que estás intentando hacer realmente, pero no funcionará. ¿Quizás estás buscando date -d "$day/$month/$year"? Por ejemplo

    $ date -d "08/10/2014"
    Sun Aug 10 00:00:00 CEST 2014
    

    O, si quieres mostrar el calendario de un mes específico:

    $ cal 10 2014
        October 2014      
    Su Mo Tu We Th Fr Sa  
              1  2  3  4  
     5  6  7  8  9 10 11  
    12 13 14 15 16 17 18  
    19 20 21 22 23 24 25  
    26 27 28 29 30 31     
    

información relacionada