【发布时间】:2021-12-31 04:29:12
【问题描述】:
我正在尝试编写简短的脚本,以及以下命令:
echo "aaa111 bbb111" | xargs -I {} echo {} | sed 's/111/222/g'
返回aaa222 bbb222,这是我所期望的。
我期待下一个命令:
echo "aaa111 bbb111" | xargs -I {} echo $(echo {} | sed 's/111/222/g')
返回相同,但它返回aaa111 bbb111!这是为什么呢?
UPD:我想要达到的目标:
我有很多文件,例如pic30-coff-gcc、pic30-coff-ag 等,我需要为每个文件创建一个符号链接,例如pic30-gcc -> pic30-coff-gcc 等。
所以我写了这个:
ls|grep 'coff-'|xargs -I {} ln -s {} $(echo {} | sed 's/coff-//g')
它不起作用:对于每个文件,它都会报告该文件存在。我检查了这样的命令:
ls|grep 'coff-'|xargs -I {} echo "ln -s {} $(echo {} | sed 's/coff-//g')"
是的,sed 部分不起作用:
ln -s pic30-coff-gcc pic30-coff-gcc
ln -s pic30-coff-gcc-4.0.3 pic30-coff-gcc-4.0.3
...
但是如果我只是输入
echo "ln -s pic30-coff-gcc $(echo pic30-coff-gcc | sed 's/coff-//g')"
有效:
ln -s pic30-coff-gcc pic30-gcc
然后我用aaa111编写了测试命令,它也不起作用。还是不明白,为什么。
【问题讨论】:
标签: bash pipe command-substitution