Какие виды интерполяции строк поддерживает POSIX sh?

По-видимому, ответ - создать новый WINEPREFIX.

export WINEPREFIX=~/.wine-new
wine winecfg 

Затем вы можете ссылаться на приложение, используя этот префикс:

WINEPREFIX="~/.wine-new" wine myapp.exe
5
30.08.2017, 06:19
2 ответа

"${blah}"и "$blah"представляют собой переносимый синтаксис оболочки: они работают во всех оболочках, совместимых с POSIX, а также в традиционных оболочках Bourne. . POSIX также требует других функций расширения переменных:

  • Работа со строками с помощью ${VAR#PREFIX}, ${VAR##PREFIX}, ${VAR%SUFFIX }и ${VAR%%SUFFIX}.
  • Условная обработка неустановленных переменных с помощью ${VAR-DEFAULT}, ${VAR=DEFAULT}, ${VAR+FALLBACK}и ] ${VAR?MESSAGE}, а также неустановленные или пустые варианты с :-, :=, :+и :?.
  • Переменная длина с ${#VAR}.

Во всех случаях помните, что результат $…подвергается расщеплению пробелами (точнее, разбиению на символы $IFS) и расширению подстановочных знаков (подстановке), если только он не находится в двойном кавычки (или несколько других контекстов, которые не позволяют использовать несколько слов).

Вы можете посмотреть, что существует в POSIX, прочитав спецификацию. Современные версии POSIX идентичны Базовым спецификациям Open Group(без дополнительных компонентов). Старые версии являются подмножеством Single Unix v2.

Unix-подобные системы без оболочки POSIX в настоящее время крайне редки. /bin/shявляется оболочкой Bourne, отличной от POSIX, в нескольких системах, особенно в Solaris, но доступна оболочка POSIX ( /usr/xpg4/bin/shв Solaris и у вас должно быть /usr/xpg4/binперед /usr/binв вашем PATH). Если вам нужна совместимость с оболочками Bourne, проверьте man-страницы интересующих вас систем, так как существует множество версий sh с немного отличающимися наборами функций. Свен Масчек поддерживает страницу с большим количеством информации.

20
27.01.2020, 20:33

В спецификации POSIX в разделе Расширение параметров говорится...

The format for parameter expansion is as follows:

${expression}

where expression consists of all characters until the matching '}'.

snip

The simplest form for parameter expansion is:

${parameter}

Затем в разделе двойное -цитирование ...

Enclosing characters in double-quotes ( "" ) shall preserve the literal value of all characters within the double-quotes, with the exception of the characters backquote,, and, as follows:

$ The dollar-sign shall retain its special meaning introducing parameter expansion (see Parameter Expansion), a form of command substitution (see Command Substitution), and arithmetic expansion (see Arithmetic Expansion).

Итак, да.

4
27.01.2020, 20:33

Теги

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