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
.