¿Cuál es la principal diferencia entre [[]] y [] en shell?
[ ] es en realidad la abreviatura del comando de prueba en bash. Es decir, todo [expr] es igual a test expr
Para el comando de prueba, use -eq para realizar una comparación numérica y, si pasa una cadena en este momento, se informará un error.
[[ expr ]] es una declaración de juicio condicional real en bash, y su sintaxis está más en línea con los hábitos de programación (como el uso de amp; amp;, ||), aunque creo que es intencional en [[ ]] Pasar una cadena a -eq también debería informar un error como test, pero obviamente la implementación de bash convierte directamente cadenas no enteras en 0 (puede verificarlo usted mismo, en [[ ]], cualquier número entero es requerido, pero proporcionado De hecho, otras cadenas que no se pueden convertir en números enteros se vuelven 0). Esto debería deberse a que la implementación de bash no verifica el contenido en ambos lados del operador -eq en [[ ]]. Para nosotros, no es necesario profundizar en estas cosas. Debemos asegurarnos de que cuando se necesiten números enteros en nuestro código, siempre proporcionemos números enteros.