xargs:用管道替换命令$(...)不起作用

德米特里·弗兰克

我正在尝试编写简短的脚本以及以下命令:

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-gccpic30-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,但是它也不起作用。还是不明白,为什么。

恶魔

似乎您所需要的只是一个简单的循环:

for file in *coff*; do
  ln -s "${file}" "${file/coff-/}"
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章