переносимо выполняет разделение полей, но не другие расширения.

Предположим, у вас есть строка в переменной bash: [[$ var = = * + 1 *]]

0
13.12.2018, 21:49
2 ответа

set -f— самый удобный способ разбиения поля без подстановки.

В bashвы можете проверить, установлен ли параметр оболочки, с помощью теста -o. Поэтому вы можете сделать это:

if [ ! -o noglob ]; then
    set -f
    trap 'set +f' RETURN
fi

Это обнаружит состояние noglobпараметра оболочки (длинное имя дляset -f). Если он не установлен, он устанавливается и ловушка RETURNустанавливается. Ловушка отключит параметр оболочки noglob, когда сценарий будет выполнен, , если источник сценария . Если сценарий не получен, ловушка ничего не сделает.

Интересное примечание :Сценарий с исходным кодом очень похож на функцию оболочки.

3
28.01.2020, 02:15

В Bash вы делаете setoptions (содержимое$-)локальным для функции с помощью local -. Или вы можете запустить часть, требующую set -f, в подоболочке, которая должна быть переносимой.

countwords() { local -; set -f; set -- $1; echo "$#"; }
countwords "a b *"

или

countwords() ( set -f; set -- $1; echo "$#"; )
countwords "a b *"
3
28.01.2020, 02:15

Теги

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