Você está usando um shell com um analisador quebrado ...
Segundo plano: a análise de $(command)
precisa de um analisador recursivo para funcionar corretamente.
Observe que a expressão completa $(command)
precisa estar em uma única string e command
pode ser realmente complexo. Para encontrar o fim do comando, os shells modernos chamam recursivamente o analisador e deixam que ele pare no primeiro coilde% supérfluo. )
e mksh
então convertem a árvore de sintaxe binária de volta em um comando, enquanto bosh
embaralha os caracteres lidos pelo analisador recrusivo em um buffer.
POSIX (realmente ksh88) acreditava que isso funcionaria com um analisador de cadeia simples que só conta ksh93
e (
e adicionou um requisito para adicionar )
antes dos rótulos de caso.
Como seu comando não está correto em relação ao que POSIX acredita, você pode tentar novamente com a mudança:
Linux | FreeBSD | OpenBSD | NetBSD ) echo $(platform_id) ;; \
para:
( Linux | FreeBSD | OpenBSD | NetBSD ) echo $(platform_id) ;; \
e
* ) echo Unrecognized ;; \
em
( * ) echo Unrecognized ;; \
Se o seu shell estiver usando um analisador de contagem tão primitivo, ele deve funcionar com essa mudança.