我正在尝试这个:
ls | sed 's/.*/"&"/' | xargs sh -- script.sh
对于文件:
- -测试 23.txt
- test24.txt
- 测试.txt
但在此之后,script.sh 仅执行:
-test 23.txt
我正在尝试这个:
ls | sed 's/.*/"&"/' | xargs sh -- script.sh
对于文件:
但在此之后,script.sh 仅执行:
-test 23.txt
最好使用glob:
./script.sh *
无需像您尝试的那样添加双引号
如果您的脚本没有遍历参数,请尝试以下操作:
for i in *; do ./script.sh "$i"; done
xargs
,默认情况下,假定它正在扩展的命令可以采用多个参数。在您的示例中,xargs
将执行
sh -- script.sh "-test 23.txt" "test24.txt" "te st.txt"
如果您的脚本只回显它的第一个参数,那么您只会看到-test 23.txt
您可以使用该标志告诉xargs
为每个输入执行命令。-n1
在很多情况下,xargs
并不是你想要的,甚至再加上find
命令(其中有一个有用的-exec
动作)。如果它是您想要的,您通常希望使用该-0
标志以及管道另一侧的一些标志,该标志用NUL
字符而不是空格或换行符分隔参数。