我试图在xargs中使用bash的字符串替换函数。但我一直有很严重的替代错误。我试图使用的命令:
ls / | xargs -I{} sh -c 'x={};echo ${x/something/somethingelse}'我可以用sed来完成这个任务,但是我不知道上面的命令有什么问题。
错误消息: sh: 1:错误替换
正如KamilCuk在下面所述,这主要是由于使用了破折号/bin/sh。
发布于 2022-05-27 11:53:03
问题:
${var/a/b}扩展是一个Bash特性,它可能在其他shell中不可用(最显著的是dash).)。
'x={};根据shell语法规则,{}部件正在由shell进行解释。默认情况下,
xargs在输入字符串中解释" ' \。补救办法:
如果您打算使用Bash功能,
ls。(或忽略最佳实践)-c脚本中不使用{}。使用参数。记住引用参数expansions.xargs.指定分隔符
例如:
printf "%s\n" /* | xargs -d '\n' -n1 bash -c 'x="$1"; echo ${x/something/somethingelse}' --
printf "%s\n" /* | xargs -d '\n' -I{} bash -c 'x="$1"; echo ${x/something/somethingelse}' -- {}
find / -maxdepth 1 -mindepth 1 | xargs -d '\n' -n1 bash -c 'x="$1"; echo ${x/something/somethingelse}' --
find / -mindepth 1 -mindepth 1 -print0 | xargs -0 -n1 bash -c 'x="$1"; echo ${x/something/somethingelse}' --https://stackoverflow.com/questions/72404440
复制相似问题