0

我正在尝试这个:

ls | sed 's/.*/"&"/' | xargs sh -- script.sh

对于文件:

  • -测试 23.txt
  • test24.txt
  • 测试.txt

但在此之后,script.sh 仅执行:

-test 23.txt
4

2 回答 2

2

最好使用glob

./script.sh *

无需像您尝试的那样添加双引号

如果您的脚本没有遍​​历参数,请尝试以下操作:

for i in *; do ./script.sh "$i"; done
于 2013-10-13T15:04:22.663 回答
1

xargs,默认情况下,假定它正在扩展的命令可以采用多个参数。在您的示例中,xargs将执行

sh -- script.sh "-test 23.txt" "test24.txt" "te st.txt"

如果您的脚本只回显它的第一个参数,那么您只会看到-test 23.txt

您可以使用该标志告诉xargs为每个输入执行命令。-n1

在很多情况下,xargs并不是想要的,甚至再加上find命令(其中有一个有用的-exec动作)。如果它是您想要的,您通常希望使用该-0标志以及管道另一侧的一些标志,该标志用NUL字符而不是空格或换行符分隔参数。

于 2013-10-13T15:19:27.837 回答