xargs 按 space 拆分字符串

xargs split string by space

我有以下 shell 脚本:

serial_numbers=$(ddcutil detect | grep "Serial number" | awk '{print }' | uniq)
echo $serial_numbers | xargs -P $(echo $serial_numbers | wc -w) -I % ddcutil setvcp 10 100 --sn %

变量 $serial_number 包含字符串 '8TRNJQ2 FGVF2Y2'xargs 将此字符串解释为一个单独的参数,并且只生成一次 ddcutil setvcp 调用。但是我希望 xargs 在 space 处拆分字符串,所以我得到了两个调用 8TRNJQ2FGVF2Y2 作为参数。

编辑:使用 -t ' ' 得到字符串最后一部分的奇怪结果:'FGVF2Y2'$'\n'

xargs 如果您直接从命令通过管道传输它,则工作正常,但如果您 echo 相同命令输出的结果则不行。

在您的命令中添加此转换:

#!/bin/bash

echo $serial_numbers | tr ' ' '\n' | xargs -P $(echo $serial_numbers | wc -w) -I % ddcutil setvcp 10 100 --sn %

xargs 现在会明白您想拆分序列号。

或者,您可以将 tr 放在第一行并将分隔的序列号存储在变量中。