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

传递变量与字符串求值:Shell脚本目录变量调用问题

解决方法:根据传入参数动态获取对应的目录变量

这问题很常见,用bash的间接引用特性就能轻松搞定,我给你一步步拆解实现步骤:

1. 整理变量定义文件

假设你的变量文件名叫dirs.conf,去掉多余的括号,用标准的bash变量赋值格式即可:

DIR_A="/home/user/docs"
DIR_B="/home/user/downloads"
DIR_C="/home/user/projects"

2. 编写目标脚本(示例命名为get_target_dir.sh)

脚本需要完成参数校验、加载变量文件、拼接目标变量名、安全取值这几个核心步骤:

#!/bin/bash

# 先检查用户是否传入了有效参数
if [ $# -ne 1 ]; then
    echo "用法错误!正确格式:$0 <varname>"
    echo "示例:$0 A 会输出DIR_A对应的目录路径"
    exit 1
fi

# 加载变量定义文件,注意路径要正确,若不在同目录请用绝对路径
source ./dirs.conf

# 拼接出要获取的目标变量名:DIR_ + 传入的参数
target_var="DIR_$1"

# 检查变量是否存在,避免输出空值或无意义内容
if [ -z "${!target_var}" ]; then
    echo "错误:找不到对应的变量 $target_var"
    exit 1
fi

# 输出最终的目录路径
echo "${!target_var}"

3. 运行脚本的方式

完全符合你想要的执行格式:

sh get_target_dir.sh A

执行后会输出/home/user/docs;传入B则输出/home/user/downloads,以此类推。

一些实用注意事项

  • 路径问题:如果dirs.conf和脚本不在同一目录,source时务必写绝对路径(比如source /opt/configs/dirs.conf),否则脚本会找不到配置文件。
  • 大小写敏感:bash变量名区分大小写,传入的参数要和你定义的DIR_A后缀严格匹配(比如a和A会对应不同变量)。
  • 安全提示:我用的${!target_var}是bash的间接引用语法,比eval类写法更安全,能避免潜在的命令注入风险,优先推荐这种方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:49:11