Soy nuevo en la programación bash. He leído dos guías buenas y largas, pero hicieron un desastre en mi cabeza sobre operadores y palabras clave.
¿Cuáles son más comunes y ampliamente utilizados? No sé cuándo usar qué y por qué.
test
,[[ ]]
O[ ]
incluso(( ))
$((exp))
o$[exp]
-gt
o>
,ge
o>=
etc.- cuándo usar
<
y />
o( )
cuando tenemos que escapar con\:
\<
\(
etc. ==
o=
(comparaciones de cadenas)
Sé que las diferencias básicas entre [
y [[
otras preguntas son un misterio para mí.
Gracias de antemano
command-line
bash
programming
scripts
MikeD
fuente
fuente
Respuestas:
test
es un shell incorporado que (obviamente) prueba alguna condición dada. Algunos proyectiles más viejos necesitan un comando especial. Así que también encontrarás un programa en/usr/bin/test
.[
También es un programa para probar alguna condición. Este software también necesita un soporte de cierre y puede encontrarlo en/usr/bin/[
.[[…]]
es una alternativa atest
y[
. Fue desarrollado para el shell Korn (ksh
). Pero también lo encuentra en las versiones Bash mayores de 2 y en el Z Shell. Los corchetes dobles tienen algunas características ingeniosas:-a
(AND) u-o
(OR) puede usar&&
o||
.=
puede hacer mucho más.((…))
es equivalente alet
. Entonces básicamente((expression))
es lo mismo quelet "expression"
. Sin embargo, conlet
usted puede usar más de una expresión, pero las llaves dobles solo permiten una expresión.$((…))
(y también$[…]
) hace algunos cálculos. Tu shell intenta calcular la expresión dentro de las llaves y reemplaza la expresión con el resultado. Asíecho $((1+1))
lleva aecho 2
. Entonces tus conchas imprimen el número 2.Cada vez que desee comparar dos números, debe usar la opción con un guión y dos letras (
-ge
,-lt
etc.). Si desea comparar cadenas, debe usar=
o!=
.Su pregunta sobre escapar es bastante difícil de responder. Porque depende del software que uses además del shell. Es decir,
grep
ygrep -E
necesita escapar diferente. Este es también el caso consed
,awk
y otros. Entonces, la mejor opción es echar un vistazo a la página de manual. Después de un tiempo te acostumbras y sabes cuándo usar el escape.fuente
if [ 2 -gt 1 ]; …
es más común, porque lo veo más a menudo en los scripts de shell y, hasta donde sé, es compatible con POSIX.