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

Bash读取含变量引用的命令字符串,变量无法展开问题

解决bash读取含变量的命令文件后无法展开变量的问题

问题核心

你遇到的问题本质是:用MYVAR=$(<command.in)读取文件内容时,bash仅将文件内容作为纯字符串存储到变量中,不会主动解析其中的变量引用。哪怕后续定义了DIR,执行$MYVAR时,bash只会把字符串拆分为命令和参数,不会重新处理其中的$DIR。

可行解决方案

方案1:使用eval强制解析变量

通过eval命令让bash重新解析字符串中的变量引用,注意要提前定义好所需变量:

#!/bin/bash

DIR="/tmp"
MYVAR=$(<command.in)

eval "$MYVAR"

注意:eval会执行字符串中的任意命令,若文件内容不可信,存在安全风险。

方案2:直接source命令文件(推荐)

如果command.in中的内容是合法的bash命令,直接用source(或.)执行该文件,bash会自然解析其中的变量:

#!/bin/bash

DIR="/tmp"
source command.in
# 等价写法:. command.in

这种方式更安全可控,避免了eval的潜在风险。

为什么之前的尝试无效

  • 提前定义DIR:MYVAR=$(<command.in)读取文件时,bash不会展开字符串里的$DIR,变量存储的仍是ls $DIR原样,执行时$DIR会被当作未定义的空变量处理。
  • 改成${DIR}:只是变量引用的语法变化,本质还是未被解析的字符串,无法解决问题。
  • 改成$(DIR):这是命令替换语法,会尝试执行DIR命令(不存在该命令),和变量展开无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:22:37