Que tipo de interpolação de strings suporta o POSIX sh?

3

"${blah}" é permitido em POSIX sh, ou isso requer shells derivadas de bash?

    
por mcandre 30.08.2017 / 05:19

2 respostas

5

"${blah}" e "$blah" são sintaxe portável do shell: eles funcionam em todos os shells compatíveis com POSIX, assim como nos shells tradicionais Bourne. O POSIX também requer outros recursos de expansão de variáveis:

  • Manipulação de string com ${VAR#PREFIX} , ${VAR##PREFIX} , ${VAR%SUFFIX} e ${VAR%%SUFFIX} .
  • Tratamento condicional de variáveis não definidas com ${VAR-DEFAULT} , ${VAR=DEFAULT} , ${VAR+FALLBACK} e ${VAR?MESSAGE} , bem como as variantes não definidas ou vazias com :- , := , :+ e :? .
  • Comprimento variável com ${#VAR} .

Em todos os casos, lembre-se de que o resultado de $… sofre divisão de espaço em branco (mais precisamente, divisão em $IFS caracteres) e expansão de caractere curinga (globbing), a menos que esteja entre aspas duplas (ou alguns outros contextos) t permitir várias palavras).

Você pode procurar o que existe no POSIX lendo a especificação. As versões modernas do POSIX são idênticas às Especificações do Open Group Base (sem componentes opcionais). Versões mais antigas são um subconjunto de Unix único v2 .

Unix-like sistemas sem um shell POSIX são extremamente raros hoje em dia. /bin/sh é um Bourne shell não POSIX em alguns sistemas, notadamente Solaris, mas um shell POSIX está disponível ( /usr/xpg4/bin/sh no Solaris, e você deve ter /usr/xpg4/bin à frente de /usr/bin em seu PATH). Se você precisar de compatibilidade com shells Bourne, verifique a man page nos sistemas nos quais você está interessado, pois existem muitas versões do sh com conjuntos de recursos ligeiramente diferentes. Sven Mascheck mantém uma página com muitas informações .

    
por 01.09.2017 / 02:10
2

Na especificação POSIX, a seção sobre Expansão de Parâmetros diz ...

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}

Em seguida, na seção sobre citações duplas ...

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).

Então, sim.

    
por 30.08.2017 / 05:33