Практическое написание сценариев командной оболочки Bash/Bash подстановки: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 856:
</source>
Отложенная интерпретация на практике используется очень редко из-за большого числа нюансов в ее использовании и в сложности отладки. Тем не менее, возможность выстраивать слои дает некоторые возможности для абстрактного программирования.
 
Взяв за основу предыдущий код, можно реализовать что-то похожее на функцию <code>printf</code>, где в произвольном формате мы подставляем значения, при этом число аргументов для функции не оговорено заранее.
<source lang="bash">
formatter() {
__resolve() {
local -i remain=$1
shift
if [[ $remain -ne 0 ]]; then
__resolve $((remain-1)) $(eval echo "$@")
else
while true; do
case "$1" in
--) shift; break ;;
*) shift ;;
esac
done
echo "$@"
fi
}
local args
local format
local remain
args=$(getopt -o '-f:' -- "$@") || return
eval "set -- $args"
while true; do
case "$1" in
-f)
format=$format$2; shift 2
;;
--)
shift; break
;;
*)
break
;;
esac
done
remain=("$@")
__resolve ${#remain[@]} "${remain[@]}" -- $format
}
 
# Например такой вызов
formatter -f '$1 [\$2]:\\\$3: \\\\\\\\\\\\\\$4' -- "$(date +%T)" "info" "0" "Hello World! How are you?"
</source>
Результат работы функции будет такой:
<source lang="">
12:11:32 [info]:0: Hello World! How are you?
</source>
 
 
{{Нижняя автоматическая навигация|next=Команды|prev=Эмуляция ссылочной адресации}}