Я знаю, когда использую $
, это означает, что символы до $
должны отображаться в конце строки.
Но я не знаю разницы между приведенными ниже тестами, когда переменная a
является целым числом:
[[a = ~ -? [0-9] +]]
[[a = ~ ^ -? [0-9] + $]]
Они такие же?
Нет, выражения [0-9] +
и [0-9] + $
не совпадают. Первая будет соответствовать одной или нескольким цифрам в любой позиции в строке, а последняя будет соответствовать только серии из одной или нескольких цифр на конце строки строка. Для демонстрации я воспользуюсь этим скриптом, который проверяет ваши выражения по первому параметру:
#!/bin/bash
a=$1
if [[ $a =~ -?[0-9]+ ]]; then
echo "match to first expression"
else
echo "no match to first expression"
fi
if [[ $a =~ ^-?[0-9]+$ ]]; then
echo "match to second expression"
else
echo "no match to second expression"
fi
Результаты следующие:
$ ./test.sh 12345
match to first expression
match to second expression
$ ./test.sh 12345AA
match to first expression
no match to second expression
Нет; оба выражения разные.
[[a = ~ -? [0-9] +]]
проверит, содержит ли a целое число в любом месте. Это может быть где угодно в строке; это не имеет значения.
но
С другой стороны, [[a = ~ ^ -? [0-9] + $]]
проверяет, состоит ли a исключительно из целых чисел (с необязательным - as первый символ), потому что ^ - это начало проверяемой строки, а $ отмечает конец строки.
Это означает, что во втором выражении любые нечисловые числа в строке не будут совпадать.