xargs按空格分割字符串



我有以下shell脚本:

serial_numbers=$(ddcutil detect | grep "Serial number" | awk '{print $3}' | 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在空格处分割字符串,因此iÍ以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放在第一行,并将分隔的序列号存储在变量中。

xargs-n选项,这在某种程度上可用于分割单字符串输入。但我注意到,将-I-n1一起使用会破坏其分裂行为(未引号的空白不会终止输入项-man xargs)。因此,除了使用tr之外,另一种换行方法是显式地将分隔符通过-d传递给xargs。此外,您还需要将-n添加到echo中以删除尾随换行符,即您所看到的$'n'(它将破坏后续管道):

echo -n "a b c" | xargs -d " " -I% echo letter_%

或者您可以在管道中插入另一个xargs:

echo -n "a b c" | xargs -n1 | xargs -I% echo letter_%

相关内容

  • 没有找到相关文章

最新更新