BASH Я бы хотел, если бы -тогда -иначе поведение объяснялось

Не нужно возиться с kde. Ваша проблема — уведомление о сбое, просто отключите его. Щелкните правой кнопкой мыши значок уведомлений > Настроить уведомления и действия о событиях > Щелкните "Настроить" в разделе "Приложения" > выберите "Рабочее пространство Plasma" > щелкните "Настроить события" > В данном списке выберите "Сбой приложения" > "Отключить" флажок "Показывать сообщение во всплывающем окне".

0
11.05.2021, 22:58
2 ответа

В этом коде есть некоторые недостатки.

  1. Не анализироватьls. И поскольку у вас есть подстановка команд, каждый результат передается в INVкак одна строка. Вместо этого вы можете просто перебрать результаты глобуса:
for inv in np4178/*pdf; do
  1. Вам не нужны никакие ;или \в этом коде. На самом деле то, как они написаны, на самом деле компенсируют друг друга. ;— это разделитель новой строки, а \— escape-символ, который при использовании в конце строки экранирует новую строку.

  2. echo (обычно )не интерпретирует символы обратной косой черты (\n), можно использовать echo -e, но printf лучше, чем echo

  3. Как вы уже обнаружили, ваша тестовая конструкция проверяет, является ли переменная нулевой, тогда как вы, по-видимому, хотите проверить, не является ли она нулевой

  4. Для этого нет абсолютно никакой причины ${INVNUMB+x}.

Вот как может выглядеть нужный вам код:

for inv in np4178/*pdf; do
    invnumb="$(pdfgrep -ho 'IN[0-9]{6,6}' "$inv")"
    if [[ -n "$invnumb" ]]; then
        printf '\n%s\n' "$invnumb"
    else
        printf '\n%s\n' "IN000000"
    fi
done
5
28.07.2021, 11:33

Спасибо за помощь. Это было очень полезно. Очевидно, что пример, который я привел, не был полным сценарием. И я не понимал значения включения переменных env в "", поэтому выучил урок. И это была первая попытка понять проблему с моей стороны, поэтому я был несколько сбит с толку тем, чего именно я пытался достичь.

Я разместил это как ответ, чтобы получить правильное форматирование кода. Далее следует более или менее то, к чему я пришел:

for INV in $(ls -1 $SRCDIR/HP3000-INV*pdf)
# search files for IN###### and return only first occurrence of match
do INVNUMB="$(pdfgrep -h -o -m 1 'IN[0-9]{6,6}' $INV)"
  if [[ -n ${INVNUMB} ]]; \
    then
      # prepend the invoice number to the file name
      # and move renamed file to xfr directory
      mv -f $INV $(dirname $INV)"/"$TODAY"/"$INVNUMB"-"$(basename $INV)
  fi
done
-1
28.07.2021, 11:33

Теги

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