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