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
Если вы разберете это с помощью sh -x
, вы увидите проблему:
+ FLUX=first
++ date +%Y%m%d_%H_%M
+ DATE=20181205_12_25
+ justName=first
+ DIR_LOG=/test/DDL_TABLES_LOG/first_20181205_12_25
+ '[' true ']'
+ justName=other
+ DIR_LOG=/test/DDL_TABLES_LOG/first_20181205_12_25
Обратите внимание, что переменная DIR _LOG устанавливается перед оценкой условия. Даже когда условие оценивается как истинное, вы получите такое же значение для переменной DIR _LOG.
Чтобы изменить поведение, измените порядок назначения, как показано ниже:
FLUX=first
DATE=$(date +%Y%m%d_%H_%M)
justName=$FLUX
if [ true ]
then
justName=other
fi
DIR_LOG=/test/DDL_TABLES_LOG/$justName'_'$DATE
Опять же, сsh -x
:
+ FLUX=first
++ date +%Y%m%d_%H_%M
+ DATE=20181205_12_28
+ justName=first
+ '[' true ']'
+ justName=other
+ DIR_LOG=/test/DDL_TABLES_LOG/other_20181205_12_28
При таком подходе вы сначала устанавливаете значение переменной justName перед вычислением переменной DIR _LOG. Это даст вам требуемый результат.
Примечание. :Условие считается истинным для удобства. Когда условие не выполняется, вы увидите вывод, как показано ниже:
+ FLUX=first
++ date +%Y%m%d_%H_%M
+ DATE=20181205_12_32
+ justName=first
+ false
+ DIR_LOG=/test/DDL_TABLES_LOG/first_20181205_12_32