我既喜欢又讨厌编写 Bash。我喜欢它在文件操作和处理进程方面的so简化(我同意这个流行问题,它在这方面比Python、Ruby等要好得多),但我讨厌它的语法,特别是围绕条件、循环等
(这是主观的,但我觉得它既令人困惑又烦人。例如,阅读时为
$var
,但写作时为 var
;如果 =
周围有空格,则静默写入失败;使用正则表达式时 ifs 中的双括号;有时是双分号,其他是单分号等)
作为 CoffeeScript(编译为 JS)的忠实粉丝,我一直想知道:是否有任何语言具有 Python/Ruby/CoffeeScript 等语言的美学/语法,但作为 Bash 而不是其他语言之一进行编译和运行运行时间?
例如我希望能够用更简单的语法编写大部分 Bash:
$AGGREGATE_FILENAME = 'allfiles.txt'
if not exists $AGGREGATE_FILENAME
touch $AGGREGATE_FILENAME
for $file in files/*
cat $file >> $AGGREGATE_FILENAME
switch $1
case 'test'
run-tests
echo 'Tests finished!'
case 'deploy'
echo 'Packaging...'
mv foo bar/
deploy-bar
这是一个超级人为的示例,语法是一个稻草人(主要受 CoffeeScript 启发,但保留了一流命令的基本 Bash 概念、与变量分离和松散类型)。
无论如何,这只是一个问题和思考。我非常希望能够用比 Bash 更好的语言编写脚本。 =)谢谢!
)并开始了powscript。
powscript与上述工具的区别
极其便携的预处理器(100% bash)由于您可能不需要函数级互操作性来调用用 Bash 编写的函数,因此最好使用完全不同的东西。 Perl 与 Bash 很接近,都令人讨厌,充满了快捷方式和奇怪的语法,但它的语义大多是合理的。 Python 不太适合诸如启动进程之类的事情,但对于一般系统编程来说要好得多,干净且易于维护。 Python 拥有适用于所有事物的优秀库和模块; Perl 甚至更好。
的语言,它是面向对象,具有类型检查并允许多维数组。语言语法受到不同编程语言的启发。 这是一个关于如何实现
List
类的示例(完整示例
此处):
class List extends Object {
var Object[] data = new Object[];
var int size = 0;
constructor List(){
super_constructor();
}
function void add(var Object object) {
data[size] = object;
size = size + 1;
}
function void pop() {
if(size == 0) {
exception("Cannot remove element from an empty list");
}
size = size - 1;
data[size] = null;
}
function int size() {
return size;
}
function Object get(var int index) {
if(index < 0 || index >= size) {
exception("Cannot access element out of bound");
}
return data[index];
}
}
BashClass 中的类和多维数组转换为 Bash 4.4 关联数组。该语言是第一个版本,并且在Github