Плагировать себя из предварительного ответа , чтобы сделать это без риска безопасности, связанного с eval
:
expandPath() {
local path
local -a pathElements resultPathElements
IFS=':' read -r -a pathElements <<<"$1"
: "${pathElements[@]}"
for path in "${pathElements[@]}"; do
: "$path"
case $path in
"~+"/*)
path=$PWD/${path#"~+/"}
;;
"~-"/*)
path=$OLDPWD/${path#"~-/"}
;;
"~"/*)
path=$HOME/${path#"~/"}
;;
"~"*)
username=${path%%/*}
username=${username#"~"}
IFS=: read _ _ _ _ _ homedir _ < <(getent passwd "$username")
if [[ $path = */* ]]; then
path=${homedir}/${path#*/}
else
path=$homedir
fi
;;
esac
resultPathElements+=( "$path" )
done
local result
printf -v result '%s:' "${resultPathElements[@]}"
printf '%s\n' "${result%:}"
}
... используется как ...
path=$(expandPath '~/hello')
Альтернативно, более простой подход, который использует eval
тщательно:
expandPath() {
case $1 in
~[+-]*)
local content content_q
printf -v content_q '%q' "${1:2}"
eval "content=${1:0:2}${content_q}"
printf '%s\n' "$content"
;;
~*)
local content content_q
printf -v content_q '%q' "${1:1}"
eval "content=~${content_q}"
printf '%s\n' "$content"
;;
*)
printf '%s\n' "$1"
;;
esac
}
Не будет никаких побочных эффектов, но и улучшений тоже не будет. Код GA должен идти перед CSS и тегами сценариев, поскольку их загрузка может блокировать браузер и задерживать загрузку Google Script и (что более важно) задерживать запуск очереди команд ga. Мета-теги на самом деле не влияют на обработку, поэтому не имеет значения, предшествуют ли они коду, но браузеры не очень разборчивы, так как в заголовке заголовка и в мета-месте отображаются слова
.Насколько мне известно, вы можете использовать теги сценария перед тегами заголовка, если вы хотите расставить приоритеты при выполнении сценария, используйте его сразу после начала тегов заголовка.
Единственное ограничение, с которым вы сталкиваетесь, заключается в том, что <meta charset
должно быть и должно быть полностью сериализовано в первые 1024 байта документа .
Размещение элементов скрипта до того, как оно может нарушить это ограничение.