Предположим, у вас есть строка в переменной bash: [[$ var = = * + 1 *]]
set -f
— самый удобный способ разбиения поля без подстановки.
В bash
вы можете проверить, установлен ли параметр оболочки, с помощью теста -o
. Поэтому вы можете сделать это:
if [ ! -o noglob ]; then
set -f
trap 'set +f' RETURN
fi
Это обнаружит состояние noglob
параметра оболочки (длинное имя дляset -f
). Если он не установлен, он устанавливается и ловушка RETURN
устанавливается. Ловушка отключит параметр оболочки noglob
, когда сценарий будет выполнен, , если источник сценария . Если сценарий не получен, ловушка ничего не сделает.
Интересное примечание :Сценарий с исходным кодом очень похож на функцию оболочки.
В Bash вы делаете set
options (содержимое$-
)локальным для функции с помощью local -
. Или вы можете запустить часть, требующую set -f
, в подоболочке, которая должна быть переносимой.
countwords() { local -; set -f; set -- $1; echo "$#"; }
countwords "a b *"
или
countwords() ( set -f; set -- $1; echo "$#"; )
countwords "a b *"