В большом сценарии, в котором вышеупомянутая функция была интегрирована для работы частью его, и предшествующий из определения hpf_matrix
функция, IFS
был изменен на IFS=,
без заботы для сброса его назад перед использованием неупомянутой замены команды в функции!
Объяснение на Использовании неупомянутой замены команды ($ (...)), не устанавливая $IFS здесь: https://unix.stackexchange.com/a/88259/13011.
Решение этого также здесь: https://unix.stackexchange.com/a/92188/13011.
Можно немного взломать, но нужно быть уверенным, что у вас доступна переменная 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
используется в качестве фиктивной переменной только для того, чтобы расширение параметра по умолчанию давало возможность произвести вывод субстиции команды.
Нет.
С 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