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.
Em Bash, ele redireciona ambos saída padrão e erro padrão a partir hello
para o arquivo world
. No POSIX sh
, ele é executado hello
em segundo plano e, em seguida, faz um redirecionamento vazio para world
, truncando-o (ou seja, é tratado como & >
).
Existem muitos outros casos em que as extensões Bash funcionam quando executadas em baixo bash
e têm efeitos diferentes em um POSIX puro sh
. Por exemplo, a expansão de chaves é outra, e também opera da mesma forma no modo POSIX do Bash e não.
No que diz respeito aos erros estáticos de sintaxe, o Bash possui as duas palavras reservadas (como [[
e time
) não especificadas pelo POSIX, como [[ x
um código de shell POSIX válido, mas um erro de sintaxe do Bash e um histórico de vários erros de incompatibilidade do 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
Somente erros de sintaxe é uma definição bastante perigosa de "inválido" para qualquer circunstância em que isso importe, mas aí está.