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 处拆分字符串,所以我得到了两个调用 8TRNJQ2
和 FGVF2Y2
作为参数。
编辑:使用 -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
放在第一行并将分隔的序列号存储在变量中。
我有以下 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 处拆分字符串,所以我得到了两个调用 8TRNJQ2
和 FGVF2Y2
作为参数。
编辑:使用 -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
放在第一行并将分隔的序列号存储在变量中。