bash 是一个非常强大的编程语言,而且也很容易入门。当你打开终端的时候,就会看到它的运行环境,所以只要你使用过 Linux 终端,那么对于 bash 应该就不会陌生。
不过尽管你可能很熟悉 bash,但是仍有一些很实用的 bash 命令,可能你还不知道。掌握这些实用的 bash 命令,会让你编写的 shell 脚本比以前更干净,更易于维护,而且功能会更强大。
1. read:请求用户输入
read 命令可用于获取用户的输入,并将其存储在变量中。看下面的例子:
#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"
上述代码中,read name 执行后,会等待用户输入,然后会将用户输入的值(一个字符串)赋给变量 name。
大家注意下第一个 echo 后面的 “What is your name?”,这是一个提示信息,用户提醒用户的输入。我们可以在 read 命令中使用 -p 选项,然后将那个提示信息放在 -p 后面,这样可以让代码显得更加简洁紧凑,但是功能跟上面的例子是一样的,如下:
#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"

2. mapfile:将文件的内容赋值给变量
使用 mapfile,可以读取文件的内容,将其输出分配被 bash 变量(数组)。文件中的每一行,都会是数组中的一个数组项(元素)。
比如,我们有一个文件 file.txt,其中的内容如下:
line 1
line 2
line 3
line 4
line 5
然后,我们运行以下命令,将该文件中的内容转为数组中的元素。数组为变量 file_var:
#!/usr/bin/env bash
mapfile file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done

在上图的结果中,我们会看到输出中多了很多空白行。可以在 mapfile 中使用 -t 选项来解决这个问题:
#!/usr/bin/env bash
mapfile -t file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done

需要注意的是,不能通过管道重定向,将文件的内容给到 mapfile 命令,就像下面这样:
#!/usr/bin/env bash
cat file.txt | mapfile -t file_var
上述代码是不正确的,这是因为管道右侧的 mapfile 命令是在子 shell 中运行的,也就是一个新的 bash 实例,它在当前的 shell 下是不起作用的。
3. source:将文件中的变量放到 shell 环境中
假设我们有一个文件 config.sh,里面的内容如下:
username=TIAP
domain=tiap-up
那么,如何读取该文件中的内容,并将其放入当前 shell 环境中呢?
使用 source 命令会很简单的实现这一点:
source config.sh
我们来检验一下:

实际上,source 命令会在当前 shell 中运行指定的文件,因此在该文件中键入任何命令,其都会在运行 source 时执行被执行。
比如,我们在 config.sh 中键入如下内容:
name="TIAP"
echo "Hello ${name}!"
echo "Have a good day!"
然后运行 source config.sh,看下结果:

此外,可以使用一个点 . 来代替 source,使用它与运行 source 是相同的。
以上就是本次分享全部内容,欢迎讨论。
转载请注明:XAMPP中文组官网 » linux系统下超实用的 bash 命令