If my goal is to write a script for POSIX compatible shells, scripts that I would begin with #!/bin/sh, how permissible is this
[[syntax.
Nem um pouco . Muitos sistemas modernos baseados em Linux usam dash como /bin/sh por padrão, o que é totalmente compatível com POSIX e não mais, e assim [[ não funcionará. Isso inclui todos os Debian e Ubuntu release e seus derivados, bem como muitas outras distribuições. Historicamente, esses sistemas costumavam usar o Bash lá e deliberadamente mudaram para melhorar o desempenho.
Muitos outros sistemas, incluindo a maioria dos BSDs e a maioria dos Unices comerciais, também não suportam [[ e nunca têm: seu sh é somente POSIX, ou suas extensões não incluem a sintaxe [[ . O sh do OpenBSD suporta uma versão de [[ , que é um pouco diferente do Bash; Eu não sei de nenhum outro que faça isso, embora eles possam existir. Caso contrário, são apenas os sistemas que usam o Bash como /bin/sh (ou menos frequentemente zsh , ou ainda menos alguns outros) onde [[ funcionará em algo declarado como sendo sh script.
Por outro lado, a grande maioria dos sistemas tem Bash instalado na prática, e apenas fazer com que seu script seja executado explicitamente com bash será suficiente para todos eles. O modo de emulação de sh do Bash sempre foi quebrado de qualquer maneira.
Como você está confiando nos recursos do Bash, não vejo nenhum motivo para declará-lo como um script sh : apenas diga #!/bin/bash e termine, usando [[ tanto quanto você quiser - ou melhor ainda, para a exclusão total de [ . Se você quiser a portabilidade máxima, use [ ou test e POSIX sh 1 e escreva com cuidado.
1 Note que alguns dos Unices comerciais possuem, ou tiveram,% POS_ sh como /bin/sh ; para trabalhar uniformemente naqueles que você precisa para executar os scripts com o caminho completo para o sistema POSIX sh .