前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >read,source,mapfile命令与shell编程

read,source,mapfile命令与shell编程

作者头像
入门笔记
发布2022-06-02 18:54:43
6440
发布2022-06-02 18:54:43
举报
文章被收录于专栏:入门小站入门小站

Bash 是一种相当强大的编程语言,也很容易上手。这里有一些鲜为人知但很有用的 bash 命令,它们将有助于使你编写的 shell 脚本更清晰、更易于维护。毕竟,它几乎是你打开终端时最经常看到的 shell

Bash 是一种相当强大的编程语言,也很容易上手。这里有一些鲜为人知但很有用的 bash 命令,它们将有助于使你编写的 shell 脚本更清晰、更易于维护。毕竟,它几乎是你打开终端时最经常看到的 shell。

Bash 中有一些你可能不知道的强大命令,即使你对该语言的使用相当熟练。但是,这些命令都是非常目的性,并且可以使你编写的 shell 脚本更清晰、更易于维护,并且比以前更强大。

在本教程中,我们将说明如何使用 read,mapfile,source 命令在 bash 脚本中的实际应用。我们举例一些常见的例子,希望能对有所帮助。

read 命令询问用户的输入

read 命令允许脚本接受用户输入,并将输入存储在变量中。

代码语言:javascript
复制
#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"

这将等待用户的输入,然后将name变量的值设置为用户输入的字符串。

例如,如果你在运行上述脚本时指定rumenz.com为你的姓名,它将输出Your name is rumenz.com

你还可以通过-pread命令指定选项来使上面的示例更加优雅,该选项将打印在 之后指定的字符串-p,然后要求用户输入:

代码语言:javascript
复制
#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"

你还会注意到我在What is your name?之后添加了一个空格。如果我们不添加它,这会让用户在输入时看起来更奇怪。

mapfile 命令将文件的行转换 Bash 数组

你可以使用mapfile命令读取文件的内容,然后将输出分配给 Bash 数组,只要在文件中遇到换行符,就会创建一个数组元素。

例如,我们创建一个名为的文件file.txt,其中包含以下文本:

代码语言:javascript
复制
Line 1
Line 2
Line 3
Line 4
Line 5

你可以通过运行以下命令将此文件转换为 Bash 数组,该命令将文件的内容分配给file_var变量:

代码语言:javascript
复制
#!/usr/bin/env bash
mapfile file_var < file.txt

for i in "${file_var[@]}"; do
 echo "${i}"
done

你会注意到上面的内容也会产生一些奇怪的间隔输出,这些输出与文件内的内容不一致,这可以通过向命令添加-t选项来解决:

代码语言:javascript
复制
#!/usr/bin/env bash
mapfile -t file_var < file.txt

for i in "${file_var[@]}"; do
 echo "${i}"
done

最后,你可能会注意到以下内容不起作用:

代码语言:javascript
复制
#!/usr/bin/env bash
cat file.txt | mapfile -t file_var

这是因为mapfile管道右侧的命令是在子 shell 执行的。换句话说,是在一个新的 Bash 实例中运行的,它无法影响你当前的 shell。

source 命令将文件中的变量导入 shell 的环境变量中

假设你有以下虚构文件config.sh其内容如下:

代码语言:javascript
复制
username=rumenz
domain=rumenz.com

如果你想获取该文件的内容并将其放入当前 shell 的环境变量中,这可以通过使用 source 命令非常简单地完成:

代码语言:javascript
复制
source config.sh

然后,你可以检查变量是否按预期分配。source命令实际上在当前 shell 的环境中运行指定的文件,因此在该文件中的任何命令都会被执行.

例如,让我们将以下内容放入config.sh

代码语言:javascript
复制
echo "Hello ${name}!"
echo "Have a good day!"

然后,如果我们运行soure config.sh,你将看到两个echo命令得到运行,以及name变量被分配:你也可以使用.代替source,其作用与此相同source

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • read 命令询问用户的输入
  • mapfile 命令将文件的行转换 Bash 数组
  • source 命令将文件中的变量导入 shell 的环境变量中
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档