昨天遇到的问题,本来要把“../..”这样的相对路径改成“$ROOT/dir”这样的路径,于是就做了一个单行 Perl 命令行。
perl -p -i -e "s/\.\.\/\.\./\$\(ROOT\)\/dir/g" *
结果,C Shell 报错。
Variable name must contain alphanumeric characters.
很明显,C Shell 把 $ 符号作为环境变量的起始,试图用环境变量替换 $ 后面的部分。但是,我只是单纯地要 $ 出现在命令中而已,并不需要替换环境变量。
后来,搜了一下,要写成这样才可以。
perl -p -i -e "s/\.\.\/\.\./\\"'$'"\(ROOT\)\/dir/g" *
唉,伟大万能的 linux,就这么一个 $ 符号让我浪费了三个小时……