read,source,mapfile命令与shell编程
Bash是一种相当强大的编程语言,也很容易上手。这里有一些鲜为人知但很有用的bash命令,它们将有助于使您编写的 shell 脚本更清晰、更易于维护。毕竟,它几乎是您打开终端时最经常看到的shell。
Bash中有一些您可能不知道的强大命令,即使您对该语言的使用相当熟练。但是,这些命令都是非常目的性,并且可以使您编写的 shell 脚本更清晰、更易于维护,并且比以前更强大。
在本教程中,我们将说明如何使用read,mapfile,source命令在bash脚本中的实际应用。我们举例一些常见的例子,希望能对有所帮助。
read命令询问用户的输入
read命令允许脚本接受用户输入,并将输入存储在变量中。
#!/usr/bin/env bashecho "What is your name?"
read name
echo "Your name is ${name}!"
这将等待用户的输入,然后将name
变量的值设置为用户输入的字符串。
例如,如果您在运行上述脚本时指定myfreax.com
为你的姓名,它将输出Your name is myfreax.com
。
您还可以通过-p
为read
命令指定选项来使上面的示例更加优雅,该选项将打印在 之后指定的字符串-p
,然后要求用户输入:
#!/usr/bin/env bashread -p "What is your name? " name
echo "Your name is ${name}!"
您还会注意到我在What is your name?
之后添加了一个空格。如果我们不添加它,这会让用户在输入时看起来更奇怪。
mapfile命令将文件的行转换Bash数组
您可以使用mapfile
命令读取文件的内容,然后将输出分配给Bash数组,只要在文件中遇到换行符,就会创建一个数组元素。
例如,我们创建一个名为的文件file.txt
,其中包含以下文本:
Line 1Line 2
Line 3
Line 4
Line 5
您可以通过运行以下命令将此文件转换为Bash 数组,该命令将文件的内容分配给file_var
变量:
#!/usr/bin/env bashmapfile file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
您会注意到上面的内容也会产生一些奇怪的间隔输出,这些输出与文件内的内容不一致,这可以通过向命令添加-t
选项来解决:
#!/usr/bin/env bashmapfile -t file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
最后,您可能会注意到以下内容不起作用:
#!/usr/bin/env bashcat file.txt | mapfile -t file_var
这是因为mapfile
管道右侧的命令是在子shell执行的。换句话说,是在一个新的Bash实例中运行的,它无法影响您当前的shell。
source命令将文件中的变量导入shell的环境变量中
假设您有以下虚构文件config.sh
其内容如下:
username=myfreaxdomain=myfreax.com
如果您想获取该文件的内容并将其放入当前shell的环境变量中,这可以通过使用 source命令非常简单地完成:
source config.sh
然后,您可以检查变量是否按预期分配。source
命令实际上在当前shell的环境中运行指定的文件,因此在该文件中的任何命令都会被执行.
例如,让我们将以下内容放入config.sh
:
name="myfreax"echo "Hello ${name}!"
echo "Have a good day!"
然后,如果我们运行soure config.sh
,您将看到两个echo
命令得到运行,以及name
变量被分配:您也可以使用.
代替source
,其作用与此相同source
。
结论
你学习如何使用read命令询问用户的输入。如何使用mapfile命令将文件的行转换Bash数组。如何source命令将文件中的变量导入shell的环境变量中。也知道source命令的别名.
。如果您有任何疑问或反馈,请随时在下面评论。
以上是 read,source,mapfile命令与shell编程 的全部内容, 来源链接: utcz.com/z/507771.html