过去三周左右我一直在学习 bash,它很容易学,因为它基本上只是命令行输入。我现在决定转向 python,但我一直在努力学习它。我的问题是关于 python 的,它似乎都围绕着数字、列表、变量等。而 bash 的命令似乎更直接。我在 python 中找不到一个可以移动文件、更改目录或其他类似操作的例子。我觉得我已经太习惯 bash 了,无法学习 python。有人能给我解释一下这些吗?
答案1
Bash 不是编程语言,而是一个 shell,其目标是快速输入命令并执行这些命令。因此,您可以运行其他命令来完成您的工作(例如mv
移动文件和目录)。Bash 中的变量是有限的,而且由于命令都是字符串,因此没有必要对它非常严格。(但可以强制类型,请参阅help declare
)。
另一方面,Python 是一种更广泛的编程语言,具有更多语言功能。您无需执行其他程序,而是使用内置函数或模块(其他语言的库)中的其他功能。有关 Python 输入/输出的基本教程,请参阅http://docs.python.org/tutorial/inputoutput.html。如果您想开始使用 Python 编程,整个教程本身值得一读。
答案2
Python 是一种编程语言;与所有其他编程语言一样,它旨在描述流程和数据。您的大多数问题都涉及模块中操作系统的 API os
,例如os.chdir()
和os.rename()
(对于 UNIXmv
命令)。
shell 是一个操作环境,旨在让您轻松访问各个级别的操作系统(文件、进程等)。它包括变量、循环和条件等编程结构,因此从这个意义上说,它是一种编程语言,但它并不是设计为编程语言的——它是不断发展的。您可以使用 shell 脚本完成相当了不起的事情——我曾经编写了一个每月处理 6 万个请求的呼叫跟踪系统。但它也有局限性,而计算机语言可以更好地处理这些局限性。
例如,你可以用 Bash 编写 Web 浏览器,但效率不高,尤其是在尝试同时下载 html、css 和 javascript 页面并处理用户输入时。像 Python 这样可以访问线程的编程语言可以更有效地处理这种情况。
虽然 Python 也有一个“shell”,但它并不容易用来访问操作系统。但它还是有用的。例如,shell 命令mv * otherdirectory
在 Python 中可以写成:
import os, glob
for fname in glob.glob('*'):
os.rename(fname, 'otherdirectory')
或者更简洁一点:
import os, glob
[os.rename(fname, 'otherdirectory') for fname in glob.glob('*')]
大多数语言教程都希望你先了解该语言,然后再了解它如何与操作系统交互。对于 shell,你需要先了解它如何与操作系统交互。