O / S = RHEL 7.2
正如您所料,下面的前两行打印“dbg”后跟/ home / mydir下的所有文件。但如果我使用-print0和xargs -0,如后两行所示,则第一个文件在目录中被跳过。我尝试将回声更改为 echo dbg“$ 0”$ @“ 只要子目录中有文件,这就可以工作。在空子目录中,$ 0返回“bash”。
# This works
dir=/home/mydir
find "$dir" -maxdepth 1 -type f -print | xargs bash -c '/bin/echo dbg "$@"'
# This skips the first file
dir=/home/mydir
find "$dir" -maxdepth 1 -type f -print0 | xargs -0 bash -c '/bin/echo dbg "$@"'
答案 0 :(得分:3)
当您使用bash -c 'command' arg0 arg1 arg2 …
时,表示为arg0
的参数将被视为$0
,即脚本的名称(因此不是"$@"
的一部分)。< / p>
您可以演示:
$ bash -c 'echo dbg "$@"' a b c
dbg b c
$ bash -c 'echo dbg "$@"' name a b c
dbg a b c
$ bash -c 'echo dbg [$0] "$@"' name a b c
dbg [name] a b c
$
使用:
find "$dir" -maxdepth 1 -type f -print0 | xargs -0 bash -c '/bin/echo dbg "$@"' name