A construção [[ não existe em todas as variantes sh. É uma coisa do ksh que foi adotada por bash e zsh. O sh do FreeBSD é derivado de cinzas e não suporta [[ .
Se você quiser usar [[ em um script, use uma linha shebang que chame um shell que suporta [[ . Você pode instalar bash ou ksh93 ou mksh como um pacote no FreeBSD; todos eles suportam [[ . Os pacotes são instalados em /usr/local/bin , enquanto o bash no Linux é quase sempre em /bin ; você pode usar /usr/bin/env para chamar um programa no PATH (é um hack clássico). Portanto, se você quiser usar [[ e outras construções bash, certifique-se de que o pacote bash esteja instalado e inicie seu script com
#!/usr/bin/env bash
Como alternativa, crie um link simbólico /usr/local/bin/bash -> /bin/bash no Linux e inicie seus scripts com
#!/usr/local/bin/bash
ou crie um link simbólico /bin/bash -> /usr/local/bin/bash no FreeBSD e inicie seus scripts com #!/bin/bash .
Como alternativa, escreva scripts que fiquem no sh core comum. Use [ em vez de [[ . Esteja ciente de que [ é um comando comum, não uma palavra reservada, então o que está dentro de colchetes é analisado normalmente, diferentemente do que está dentro de colchetes duplos - por exemplo você não pode escrever [[ condition1 && condition2 ]] da mesma forma com colchetes, você precisa para escrever [ condition1 ] && [ condition2 ] . Sh simples não tem uma construção de correspondência de expressão regular, mas para o que você está fazendo, a correspondência de padrão de caractere curinga é suficiente:
case "$1" in
*[\/]) echo "$1 ends with a slash or backslash";;
*) echo "$1 does not end with a slash or backslash";;
esac