You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中读取/tmp/input.dat文件中的多个指定变量?

在Bash中从/tmp/input.dat提取指定变量的方法

嘿,我来帮你搞定在Bash环境下从/tmp/input.dat里提取这三个指定变量的事儿~下面分两种常见场景给你实用方案:

场景1:/tmp/input.dat里是直接的变量赋值行

如果你的/tmp/input.dat内容本身就是每行一个变量赋值(比如下面这种格式):

machine=1234-567*890ABC
action=REPLACE
location=test_location

那最简单的方式就是直接把文件加载到当前Shell环境里:

# 使用点命令加载文件(和source命令效果完全一致)
. /tmp/input.dat

# 验证变量是否正确读取
echo "machine: $machine"
echo "action: $action"
echo "location: $location"

⚠️ 注意:因为machine的值里包含*这个通配符,如果你直接加载未加引号的赋值行,Bash会自动把*展开成当前目录下的文件列表,导致变量值出错。解决办法有两个:

  1. 提前修改/tmp/input.dat,给machine的值加上单引号:machine='1234-567*890ABC'
  2. 用sed临时处理文件后再加载:
# 给machine的值加上单引号,生成临时文件
sed -E "s/(machine=)(.*)/\1'\2'/" /tmp/input.dat > /tmp/temp_input.dat
# 加载临时文件
. /tmp/temp_input.dat
# 删除临时文件
rm /tmp/temp_input.dat

场景2:需要从任意文本中匹配提取变量

如果/tmp/input.dat是普通文本,变量分散在不同行里(比如下面这种情况):

系统信息:machine=1234-567*890ABC,设备状态正常
执行操作:action=REPLACE
目标路径:location=test_location

可以用grep配合Perl正则表达式精准提取每个变量:

# 提取machine变量,\K表示忽略前面的"machine="部分
machine=$(grep -oP 'machine=\K.*' /tmp/input.dat)
# 提取action变量
action=$(grep -oP 'action=\K.*' /tmp/input.dat)
# 提取location变量
location=$(grep -oP 'location=\K.*' /tmp/input.dat)

# 验证提取结果
echo "machine: $machine"
echo "action: $action"
echo "location: $location"

这个方法的好处是不管变量在文本的什么位置,只要能匹配到变量名=值的格式,就能精准提取值的部分,哪怕值里包含特殊字符也没问题。

内容的提问来源于stack exchange,提问作者Tas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:31:39