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

Bash脚本字符串匹配失效:如何替换模板字符生成Docker YAML配置

Bash脚本模板替换失效问题修复

你的脚本主要有几个关键问题导致替换失效:

  • Bash变量赋值不能有空格,原脚本里line = $customer这种写法是错误的
  • 替换后的变量没有写入目标文件,只有else分支执行了写入操作
  • 未处理目录已存在的情况,mkdir会报错
  • 未用引号包裹变量,可能导致空格或特殊字符异常

以下是修正后的完整脚本:

#!/bin/bash
# 读取输入
read -p '输入客户名称: ' customer
read -p '输入管理员名称: ' admin
read -p '输入管理员密码: ' pass

# 创建目录(-p参数避免目录已存在时报错)
mkdir -p ~/"$customer"
# 定义目标文件路径
target_file=~/"$customer"/"$customer".yaml

# 模板文件路径
input="/home/x/1.txt"

# 逐行读取模板文件
while IFS= read -r line
do
    # 判断并替换变量
    if [[ "$line" == "q" ]]; then
        line="$customer"
    elif [[ "$line" == "r" ]]; then
        line="$admin"
    elif [[ "$line" == "4" ]]; then
        line="$pass"
    fi
    # 无论是否替换,都将内容写入目标文件
    echo "$line" >> "$target_file"
done < "$input"

关键修改说明:

  1. 变量赋值修正:把line = $customer改成line="$customer",Bash中赋值符号=前后不能有空格,否则会被当成命令执行
  2. 统一写入逻辑:将写入文件的操作移到if判断外,确保替换后的内容也能写入目标文件,原脚本只有未匹配的行才写入,替换后的行被丢弃了
  3. 目录创建优化:给mkdir加-p参数,即使目录已存在也不会报错
  4. 引号包裹变量:所有变量引用都用双引号包裹,避免空格、特殊字符导致的异常
  5. 目标文件路径变量化:用变量存储目标文件路径,提升脚本可读性和维护性

内容的提问来源于stack exchange,提问作者Антон Дихтярук

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:15:50