Вот код, который делает что-то другое в POSIX sh и Bash:
hello &> world
Является ли это "недействительным" для вас, я не знаю.
В Bash он перенаправляет как стандартный вывод, так и стандартную ошибку из hello
файла world
. В POSIX sh
он работает hello
в фоновом режиме, а затем выполняет пустое перенаправление в него world
, обрезая его (т. Е. Он обрабатывается как & >
).
Существует множество других случаев, когда расширения Bash будут выполнять свою функцию при запуске bash
и будут иметь разные эффекты в чистом POSIX sh
. Например, расширение скобки - это другое, и оно тоже работает в режиме POSIX Bash, а не так.
Что касается статических синтаксических ошибок, в Bash есть зарезервированные слова (например, [[
и time
), не указанные в POSIX, например, [[ x
допустимый код оболочки POSIX, но синтаксическая ошибка Bash, а также история различных ошибок несовместимости POSIX, которые могут привести к синтаксическим ошибкам, такой как тот из этого вопроса :
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
«Только синтаксические ошибки» - довольно опасное определение «недействительного» для любых обстоятельств, где это важно, но это так.