在某些情况下,'find'、'bash' 和 'sed' 看起来不像人们预期的那样工作。
下面的例子应该首先创建文件'sample.txt',然后找到该文件,最后通过'-exec'命令处理它。执行的命令打印找到的文件名、测试样本和修改后的文件名。'sed' 命令本身用于将 'txt' 替换为 'TXT'。
touch sample.txt
find ./ -maxdepth 1 -name "*.txt" -exec echo {} $(echo Specimen_before.txt {} Specimen_after.txt |sed -e "s/txt/TXT/g") \;
Run Code Online (Sandbox Code Playgroud)
预期的输出是:
./sample.txt Specimen_before.TXT ./sample.TXT Specimen_after.TXT
相反,它产生:
./sample.txt Specimen_before.TXT ./sample.txt Specimen_after.TXT
(该示例还通过反引号 '`' 使用老式命令替换进行了测试,结果相同)
我究竟做错了什么?