Хотя это возможно с помощью CSS, лучшим подходом было бы использование встроенного SVG с маскировкой SVG . Этот подход имеет некоторые преимущества перед CSS:
CodePen Demo: Маска текста SVG
[/g9]
body,html{height:100%;margin:0;padding:0;}
body{
background:url('https://farm9.staticflickr.com/8760/17195790401_94fcf60556_c.jpg');
background-size:cover;
background-attachment:fixed;
}
svg{width:100%;}
Если вы хотите сделать текст доступным и доступным для поиска, вам необходимо включить его за пределы
. В следующем примере показано, как сохранить прозрачный текст с тегом :
body,html{height:100%;margin:0;padding:0;}
body{
background:url('https://farm9.staticflickr.com/8760/17195790401_94fcf60556_c.jpg');
background-size:cover;
background-attachment:fixed;
}
svg{width:100%;}
В Bash 5.0 появилась новая опция оболочки localvar_inherit
, позволяющая локальным переменным с одинаковым именем наследовать значение переменной с таким же именем в предыдущей области видимости:
со следующим выводом:
Before call: global
In call: global
In call, after setting: local
After call: global
Если у вас нет Bash 5.0, вы должны установить значение в функции, как вы делали в своем вопросе, с тем же результатом.
Расширение происходит до назначения (в начале), поскольку в документации указано :
Расширение выполняется в командной строке после того, как оно разбито на слова.
blockquote>Таким образом, поведение должно быть предсказуемым (и определенным). В
local a=$a
при расширении$a
он все еще является глобальным. Выполнение команды (присваивание / объявление) происходит позже (когда$a
уже заменено ее значением).Однако я не уверен, что это не смутило бы наличие по существу двух разных переменных (зависящих от области видимости) с одним и тем же именем (т. Е. Кажущимся одним и тем же). Поэтому я предпочел бы поставить под сомнение целесообразность такого подхода к методам кодирования / удобочитаемости / простоте навигации.