"${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 .