假设uuidgen
为每次调用生成一个随机uid。下面的命令:
╰─○ cat a.txt | xargs -I {} -L 1 sh -c "uuidgen"
54693322-1ABF-4FCB-96E5-90EC0F4AC33E
9F1BA4CF-5612-46D7-90E9-EE653F0396FE
25F5D853-03BA-42F7-9FF8-1D3E124D09B3
046A348E-3FC0-414A-8469-21A016147245
这很好,但是下面的命令会给我相同的uuid:
╰─○ cat a.txt | xargs -I {} -L 1 sh -c "echo $(uuidgen)"
7477A621-331C-4727-8471-677528BC79AC
7477A621-331C-4727-8471-677528BC79AC
7477A621-331C-4727-8471-677528BC79AC
7477A621-331C-4727-8471-677528BC79AC
命令替换符$(..)
在双引号"
内展开在shell执行命令之前。所以你在运行:
xargs -I {} -L 1 sh -c "echo 7477A621-331C-4727-8471-677528BC79AC"
,它将每次打印相同的值。使用set -x
调试脚本。参见xargs -t
输出。用shellcheck.net检查你的脚本
如果你想将字符串echo $(uuidgen)
原样传递给由xargs
生成的shell,你必须引用它。
xargs sh -c "echo $(uuidgen)"
# or
xargs sh -c 'echo $(uuidgen)'