Eu tenho o seguinte script simples:
#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {1..99..2}
do
echo $i
done
Saída no caso de executar com sh file.sh
:
Bash version ...
{1..99..2}
Saída no caso de executar com bash file.sh
:
Bash version 4.2.25(1)-release...
1
3
5
.
.
.
99
Eu tenho duas consultas:
Se eu escrevi uma linha shabang especificando o shell, ele não deveria rodar com o bash, se eu uso
sh file.sh
oubash file.sh
?Eu entendo que
$BASH_VERSION
não é reconhecido por sh, mas qual é o problema com o loop for? Por que não está imprimindo os números?
fonte
dash
, Que, como você dizsh
no Ubuntu, não está presente principalmente "como um prompt de emergência para as circunstâncias do DIRE", mas para que o sistema possa executar e iniciar rapidamente . Desta forma,dash
é bem adequado para uso em um sistema operacional moderno, mas o que é bem adequado para é como um low-profile, shell rápido para scripting - particularmente, a execução de scripts do sistema durante a inicialização um grande, complexo, sistema operacional moderno, com o mínimo sobrecarga de desempenho.sh
constantemente, e particularmente intensamente, como o Ubuntu inicializa. É importante principalmente para o uso de scripts automatizados, e esse é um caso de uso muito importante no Ubuntu. (Se você fosse para remover o/bin/sh
link simbólico - de modo que, com efeito, não haveria "SH" - as coisas iriam correr terrivelmente errado: Ubuntu não poderia iniciar em um estado utilizável.)