обновить параметры переменной ksh88 [закрыто]

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
05.12.2018, 13:24
1 ответ

Если вы разберете это с помощью 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
2
27.01.2020, 23:31

Теги

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