我正在构建一个script,除其他外,它将用文件夹路径替换XML文件中的模式。
我尝试使用的sed
命令是:
SEDCMD="s|PATHTOEXPORT|$2|"
其中$2
是包含文件夹路径的命令行参数。
后来称之为:
sed -e $SEDCMD $FILTER > $TEMPFILTER
但是,在运行命令时,我收到“未终止''命令”错误。
我该如何解决这个问题?我尝试更改用于分隔正则表达式的字符(从/
到|
)。我尝试引用(以不同的方式)命令行参数。
答案 0 :(得分:5)
shell正在查看解析$SEDCMD
的内容。如果您从shell脚本(包括Makefile)中使用它,则应始终使用双引号保护所有扩展变量。双引号将强制进行变量插值,但保护任何shell元字符不被进一步解释。
sed -e "$SEDCMD" "$FILTER" > "$TEMPFILTER"
我认为$FILTER
和$TEMPFILTER
是文件名?我也引用了它们,以防它们包含空白或其他类型的元字符等邪恶的东西;奇怪的,是的,但它已经知道会发生。定期运行rename 's/\s+/_/g'
文件名以清除空白,但对于其他人,你必须采取更谨慎的方法;例如,如何处理星星与问号与括号和parens等等。
如果你将-x
和/或-v
添加到你的shell命令行,你会得到一些跟踪调试,我认为这可能会显示你在这里出错的地方。