我正在尝试制作一个简单的bash脚本,该脚本使用一个输入文件并用实际值(在这种情况下为日期)替换&date
之类的占位符
示例:
text=$(sed -e "s/&file/$FILE/" -e "s/&date/$DATE/" $FILE)
echo $text
问题:
/******
之类的内容更改为/bin /boot etc
(因此,路径已解析)。 *****/
也将被替换。示例:
输入:
/**********************************
hello
**********************************/
输出(在中间折行以使其可读):
/bin /boot /dev /etc /home /lib /lib64 /mnt
/opt /proc /root /run /sbin /srv /sys /tmp /usr /var hello parent/ parent_neighbor/
我想我需要对文件进行转义,但是我找不到任何方法。
答案 0 :(得分:1)
正在发生根目录的扩展,因为Bash将> ***********解释为“ / ***********”(路径名扩展)为“根目录通配符通配符...” ...”
为此,我什至不使用sed,它的regex语法有点不愉快。关于Perl:
"$text"
正如@Gordon Davisson在评论中所说,此处的关键是在将echo
用作echo
的参数时引用{{1}},因此Bash不会将“ / ***”视为路径并在甚至调用{{1}}之前将其展开。
编辑:这是一个链接:http://wiki.bash-hackers.org/syntax/expansion/globs