Значение '^[0-9]+$'?

Каналы соединяют выход или левую команду со входом правой команды. Это не имеет ничего общего с длиной потока. Однако каждая команда в конвейере по-прежнему имеет собственные правила буферизации. Если вы не запускаете их в каждой команде, вы не увидите их в окончательном выводе.

3
22.05.2018, 05:16
4 ответа

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 bash3.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
6
27.01.2020, 21:11

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 : 
5
27.01.2020, 21:11

La prueba está comprobando si $VARcontiene la cadena ^[0-9]+$. Para probar $VARcon la expresión regular ^[0-9]+$, elimine las comillas.

La prueba será verdadera si la expresión regular coincide. Coincide si la cadena en $VARcontiene 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
1
27.01.2020, 21:11

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 ):Regex

1
27.01.2020, 21:11

Теги

Похожие вопросы