Каналы соединяют выход или левую команду со входом правой команды. Это не имеет ничего общего с длиной потока. Однако каждая команда в конвейере по-прежнему имеет собственные правила буферизации. Если вы не запускаете их в каждой команде, вы не увидите их в окончательном выводе.
La expresión regular ^[0-9]+$
coincidirá con una cadena contigua de dígitos no -vacía, es decir, una línea no vacía -que se compone únicamente de dígitos. Si desea usar esa expresión regular en [[... =~ there ]]
en bash
3.2 o superior, también debe dejarla sin comillas, es decir, ^[0-9]+$
en lugar de '^[0-9]+$'
. Su fragmento de código probablemente debería tener este aspecto:
#!/usr/bin/env bash
if [[ "${VAR}" =~ ^[0-9]+$ ]]; then
#execute code
fi
La expresión regular coincidirá con el contenido de VAR cuando VAR desde el inicio (^ )hasta el final ($ )coincida con uno o más (+ )dígitos [0 -9 ]. La línea debe contener solo dígitos para que coincidan ^ y $ en cualquiera de los extremos de [0 -9]+.
Programa para probar la comparación de if regex contra un rango de entradas
$ cat flub
#!/usr/bin/bash
for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
echo -n "Testing $VAR : "
if [[ "$VAR" =~ ^[0-9]+$ ]]; then
echo "$VAR" matches
else
echo
fi
done
Salida
$./flub
Testing 3a3 :
Testing ^[0-9]+$ :
Testing 2 : 2 matches
Testing 1919181818 : 1919181818 matches
Testing flub :
Testing 282_2828 :
Testing 38938 2828 :
Testing 3939. :
Testing.3939 :
Mientras que con la parte extendida de expresiones regulares citada con comillas simples solo coincide con la cadena literal:
$ cat flub
#!/usr/bin/bash
for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
echo -n "Testing $VAR : "
if [[ "$VAR" =~ '^[0-9]+$' ]]; then
echo "$VAR" matches
else
echo
fi
done
$./flub
Testing 3a3 :
Testing ^[0-9]+$ : ^[0-9]+$ matches
Testing 2 :
Testing 1919181818 :
Testing flub :
Testing 282_2828 :
Testing 38938 2828 :
Testing 3939. :
Testing.3939 :
La prueba está comprobando si $VAR
contiene la cadena ^[0-9]+$
. Para probar $VAR
con la expresión regular ^[0-9]+$
, elimine las comillas.
La prueba será verdadera si la expresión regular coincide. Coincide si la cadena en $VAR
contiene solo dígitos (y al menos un dígito ).
Otra forma de hacer la misma prueba es concase
(que lo haría portátil a otro shell además debash
):
case "$VAR" in
*[!0-9]*)
# string has non-digits
;;
*[0-9]*)
# string has at least one digit
# (and no non-digits because that has already been tested)
;;
*)
# string must be empty due to the previous two tests failing
esac
Si no está seguro del significado de una expresión regular, utilice una de las muchas herramientas en línea. Le dicen exactamente qué parte de las expresiones hace qué e incluso muestran coincidencias en muestras.
Aquí hay un ejemplo dehttps://regex101.com/(también hay otros sitios geniales ):