Есть ли специальная переменная, содержащая соответствие оператора выбора

В большом сценарии, в котором вышеупомянутая функция была интегрирована для работы частью его, и предшествующий из определения hpf_matrix функция, IFS был изменен на IFS=, без заботы для сброса его назад перед использованием неупомянутой замены команды в функции!

Объяснение на Использовании неупомянутой замены команды ($ (...)), не устанавливая $IFS здесь: https://unix.stackexchange.com/a/88259/13011.

Решение этого также здесь: https://unix.stackexchange.com/a/92188/13011.

2
11.11.2014, 17:24
2 ответа

Можно немного взломать, но нужно быть уверенным, что у вас доступна переменная unset. Например:

unset foo  # Make sure foo is unset, or at least set to the empty string
case ${foo:-$(date +%m)} in
   1) echo "Jan" ;;
   2) echo "Feb" ;;
 # ...
  11) echo "Nov" ;;
  12) echo "Dec" ;;
esac

Здесь foo используется в качестве фиктивной переменной только для того, чтобы расширение параметра по умолчанию давало возможность произвести вывод субстиции команды.

1
27.01.2020, 21:54

Нет.

С ZSH -O ExtendedGlob Однако вы можете сделать:

case $(cmd) in
  ((#m)*) printf '%s\n' "Match: $MATCH"
esac

(# M) (# M) - это флаг глобубинг , чтобы включить $ match . Это более полезно в таких вещах, как $ {var // (# m)? / <$ Match>} .

или:

case $(cmd) in
  ((#b)(???)(*)) printf '%s\n' "First 3 chars: $match[1], rest: $match[2]"
esac

(# B) для включения обратных ссылок .

или (без необходимости Extendendeglob ):

case ${output::=$(cmd)} in
  (*) printf '%s\n' "Output: $output"
esac
5
27.01.2020, 21:54

Теги

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