Aqui está um código que faz algo diferente no POSIX sh e Bash:
hello &> world
Se isso é "inválido" para você, não sei.
No Bash, redireciona a saída padrão e erro padrão de hello
no arquivo world
. No POSIX sh
, ele executa hello
no segundo plano e, em seguida, faz um redirecionamento vazio para world
, truncando-o (isto é, é tratado como & >
).
Existem muitos outros casos em que as extensões Bash farão as suas coisas quando executadas em bash
e terão efeitos diferentes em um POSIX sh
puro. Por exemplo, expansão de chaves é outra, e ela também funciona da mesma maneira em Bash Modo POSIX e não.
No que diz respeito aos erros de sintaxe estática, o Bash tem ambas as palavras reservadas (como [[
e time
) não especificadas pelo POSIX, tal que [[ x
é código shell POSIX válido, mas um erro de sintaxe Bash e um histórico de vários erros de incompatibilidade POSIX que podem resultar em erros de sintaxe, como o desta pergunta :
x=$(cat <<'EOF'
'
EOF
)
bash: line 2: unexpected EOF while looking for matching '''
bash: line 5: syntax error: unexpected end of file
Apenas erros de sintaxe é uma definição bastante perigosa de "inválido" para qualquer circunstância em que seja importante, mas aí está.