核心, 执行一行解析一行
windows
:执行的地方进行解析, 可以任意跳转执行;
bash
从上往下解析执行; 一行行解析发现语法错误;
差异: windows
可以部分不解析; linux
需要从上往下解析合法;
总结:linux, windows
可以一上一下共存
# linux code# windows code
关键: 脚本解析的差异和符号的差异
:
在windows
是注释, bash
是强制扩张变量, 或者重定向; 利用这个特性和解析特性,可以使得脚本共存。
代码
:; if [ ! "linux" ] ; then
@echo off
goto :windows_bat_code
exit /b 0
fifunction linux_bash_code
{echo this is linux, linux code program;
} && linux_bash_code && exit:windows_bat_code
setlocal
echo this is windows, windows code program;
endlocal && exit /b 0
windows
平台, 第一行都是注释; 直接执行2, 3, 4
;linux
平台;
则第二行代码, 执行if
, 一定false
, 即内部代码不会执行解析; 继续下面执行linux
代码;
:; if [ ! "linux" ]; then
echo windows;
exit
else
echo linux
exit
fi
参考
https://stackoverflow.com/questions/17510688/single-script-to-run-in-both-windows-batch-and-linux-bash