如何使用bash脚本替换文件内容?现有脚本执行无结果错在哪里?
你编写的Bash脚本存在以下错误:
- Shebang行格式错误:你写的
#! /bin/bash/末尾多了斜杠,/bin/bash是可执行二进制文件不是目录,正确写法为#!/bin/bash,否则可能导致脚本无法直接通过./脚本名的方式执行。 - 变量赋值语法错误:Bash中变量赋值时等号两侧不允许有空格,你写的
old = "abc"、new = "bcd"会被系统识别为调用名为old、new的命令,而非给变量赋值,最终old和new变量实际为空,sed执行的是空内容替换逻辑,自然达不到替换abc的效果。正确写法为old="abc"、new="bcd"。 - 变量引用缺少引号防护:你在调用
$file时没有用双引号包裹,如果用户输入的文件名包含空格、特殊字符,会被shell分词导致sed执行报错,建议修改为"$file"。 sed -i兼容问题:如果你是在macOS/BSD系统下运行脚本,sed -i要求必须显式指定备份文件的后缀,直接使用会报错。兼容写法可以调整为sed -i.bak "s/$old/$new/g" "$file",执行后会自动生成原文件的.bak备份,不需要可以后续手动删除;如果是Linux下的GNU Sed则可以省略备份后缀。
内容的提问来源于stack exchange,提问作者Aktar
相关产品推荐
相关产品推荐

