Batsh é uma linguagem de programação simples baseada em C que compila para Bash, Windows Batch. Ele permite que você escreva código depois de executado em todas as plataformas, sem nenhuma dependência adicional.
Tanto o Bash quanto o Batch são complicados de ler e difíceis de escrever devido a razões históricas. Você tem que gastar muito tempo aprendendo qualquer um deles e escrever código dependente da plataforma para cada sistema operacional. Se por acaso você é o mantenedor de uma ferramenta de plataforma cruzada que depende do Bash no Linux / Mac e do Batch no Windows como “código de colagem” e acha doloroso “sincronizar” entre eles, você gostaria de experimentar o Batsh.
Demonstração online: http://batsh.byvoid.com/
Projeto: https://github.com/BYVoid/Batsh
Exemplo:
function fibonacci(num) {
if (num == 0) {
return 0;
} else if (num == 1) {
return 1;
} else {
return (fibonacci(num - 2) + fibonacci(num - 1));
}
}
println(fibonacci(8));
Código compilado (Bash):
function fibonacci {
local _1
local num
local _0
num=$1
if [ $num == $((0)) ]; then
"echo" "-ne" $((0))
return
else
if [ $num == $((1)) ]; then
"echo" "-ne" $((1))
return
else
_0=$("fibonacci" $(($num - 2)))
_1=$("fibonacci" $(($num - 1)))
"echo" "-ne" $(($_0 + $_1))
return
fi
fi
}
"echo" "-e" $("fibonacci" $((8)))
Código compilado (Windows Batch):
@echo off
setlocal EnableDelayedExpansion
setlocal EnableExtensions
call :fibonacci _1 0 8
set _0=!_1!
echo !_0!
goto :EOF
:fibonacci
set num_%~2=%~3
if /i !num_%~2! EQU 0 (
set %~1=0
goto :EOF
) else (
if /i !num_%~2! EQU 1 (
set %~1=1
goto :EOF
) else (
set /a _0_%~2=^(!num_%~2! - 2^)
set /a _5_%~2=^(1 + %~2^)
call :fibonacci _6_%~2 !_5_%~2! !_0_%~2!
set _1_%~2=!_6_%~2!
set /a _2_%~2=^(!num_%~2! - 1^)
set /a _7_%~2=^(1 + %~2^)
call :fibonacci _8_%~2 !_7_%~2! !_2_%~2!
set _3_%~2=!_8_%~2!
set /a _4_%~2=^(!_1_%~2! + !_3_%~2!^)
set %~1=!_4_%~2!
goto :EOF
)
)