xargs 中 bash 中的转义字符串替换功能如何?

how do escape string replacement function in bash in xargs?

我试图在 xargs 中使用 bash 的字符串替换功能。但是我不断收到错误的替换错误。 我尝试使用的命令:

ls / | xargs -I{} sh -c 'x={};echo ${x/something/somethingelse}'

我可以用 sed 来完成,但我无法弄清楚上面的命令有什么问题。

错误信息: sh: 1: 替换错误


正如 KamilCuk 在下面所述,这主要是由于使用短划线作为 /bin/sh。

问题:

补救措施:

  • 如果您打算使用 Bash 功能,请明确调用 Bash。
  • 不要使用ls。 (或忽略最佳实践)
  • 不要在 -c 脚本中使用 {}。使用参数。记得引用参数扩展。
  • 明确指定 xargs 的定界符。

例如:

printf "%s\n" /* | xargs -d '\n' -n1 bash -c 'x=""; echo ${x/something/somethingelse}' --
printf "%s\n" /* | xargs -d '\n' -I{} bash -c 'x=""; echo ${x/something/somethingelse}' -- {}
find / -maxdepth 1 -mindepth 1 | xargs -d '\n' -n1 bash -c 'x=""; echo ${x/something/somethingelse}' --
find / -mindepth 1 -mindepth 1 -print0 | xargs -0 -n1 bash -c 'x=""; echo ${x/something/somethingelse}' --