我发现,当我想创建一些 shell 脚本或高级命令时,总是让我很难记住命令的名称及其开关。
例如
tr -d '\n' < file | wc -c
虽然在编程语言中我可以写类似的东西
len(替换(str(文件), "\n", ""))
哪个更容易记住,并且在手册页中搜索的可能性更小,并且对其他人来说更容易理解。
那么,为什么 shell 脚本多年来一直保持着这种神秘的形式呢?他们是否努力改变语法,以便在不研究大量手册页的情况下清楚代码的作用?这种形式有什么优点吗?我们如何克服这些缺点,最大限度地利用 shell 脚本?
答案1
您知道多少种编程语言可以让您打开文件进行读取,调用使用该文件内容的库函数,将该函数的输出流式传输到另一个函数,将第二个函数的输出返回给用户,返回退出状态,然后清理所有内容,所有这些都在很短的一行中完成?
您给出的示例遗漏了大多数语言所需的许多支持 gubbin。
有多少种编程语言具有接受任意数量的输入、以多种模式工作并且具有简单界面的库函数?
printf
也许吧,但大多数库最终都会有一系列具有不同名称和不同参数的函数,您必须学习这些函数。我看不出有什么区别。
此外,大多数语言都会串行调用这些函数。 Shell 脚本并行运行它们,并且可以通过管道传输任意数量的数据,而不消耗太多内存,并且(如果数据源是键盘、网络套接字或其他东西)这一切都是通过惰性求值完成的,当数据到达。你最喜欢的语言能做到这一点吗?
有许多语言可以更快、更高效地完成这项工作,或者可以更准确地处理数字,但不要低估 shell 脚本的威力!
至于语法?嗯,它有效。无论现在看起来如何,你都必须学习它。你还想要什么?
答案2
尝试pbs
-- 将命令行工具与 Python 结合起来 -- 例如这样:
# sort this directory by biggest file
print sort(du(glob("*"), "-sb"), "-rn")
# print the number of folders and files in /etc
print wc(ls("/etc", "-1"), "-l")