printf linux问题-lsusb返回返回一个长字符串的值 我有一个USB列表,其中列表不包含“基础”(以摆脱Linux基础线)。我按照以下方式分配它们: usb_details2() { bus=$(lsusb |grep -v Foundation | awk {'print $2'}) device=$(lsusb |grep -v Foundation | awk {'print $4'}) id=$(lsusb |grep -v Foundation | awk {'print $6'}) name1=$(lsusb |grep -v Foundation | awk {'print $7'}) name2=$(lsusb |grep -v Foundation | awk {'print $8'}) name3=$(lsusb |grep -v Foundation | awk {'print $9'}) name4=$(lsusb |grep -v Foundation | awk {'print $10'}) name5=$(lsusb |grep -v Foundation | awk {'print $11'}) name6=$(lsusb |grep -v Foundation | awk {'print $12'}) name7=$(lsusb |grep -v Foundation | awk {'print $13'}) name8=$(lsusb |grep -v Foundation | awk {'print $14'}) name9=$(lsusb |grep -v Foundation | awk {'print $15'}) printf "Bus: %s\tDevice: %s\tID: %s\t Device Name: %s %s %s" "$bus" "$device" "$id" "$name1" "$name2" "$name3" ...etc } echo $(usb_details2)

printf linux问题-lsusb返回返回一个长字符串的值 我有一个USB列表,其中列表不包含“基础”(以摆脱Linux基础线)。我按照以下方式分配它们: usb_details2() { bus=$(lsusb |grep -v Foundation | awk {'print $2'}) device=$(lsusb |grep -v Foundation | awk {'print $4'}) id=$(lsusb |grep -v Foundation | awk {'print $6'}) name1=$(lsusb |grep -v Foundation | awk {'print $7'}) name2=$(lsusb |grep -v Foundation | awk {'print $8'}) name3=$(lsusb |grep -v Foundation | awk {'print $9'}) name4=$(lsusb |grep -v Foundation | awk {'print $10'}) name5=$(lsusb |grep -v Foundation | awk {'print $11'}) name6=$(lsusb |grep -v Foundation | awk {'print $12'}) name7=$(lsusb |grep -v Foundation | awk {'print $13'}) name8=$(lsusb |grep -v Foundation | awk {'print $14'}) name9=$(lsusb |grep -v Foundation | awk {'print $15'}) printf "Bus: %s\tDevice: %s\tID: %s\t Device Name: %s %s %s" "$bus" "$device" "$id" "$name1" "$name2" "$name3" ...etc } echo $(usb_details2),linux,bash,unix,ubuntu,Linux,Bash,Unix,Ubuntu,这只会造成混乱: Bus: 002 002 003 003 Device: 003: 007: 003: 002: ID: 058f:6366 148f:5370 045e:0745 093a:2510 Device Name: Alcor Ralink Microsoft Pixart Micro Technology, Corp. Imaging, Corp. Corp. Nano Inc. 这就是“lsusb | grep-v基金会”的回报: Bus 002 Device 003: ID

这只会造成混乱:

Bus: 002 002 003 003 Device: 003: 007: 003: 002: ID: 058f:6366 148f:5370 045e:0745 093a:2510 Device Name: Alcor Ralink Microsoft Pixart Micro Technology, Corp. Imaging, Corp. Corp. Nano Inc.
这就是“lsusb | grep-v基金会”的回报:

Bus 002 Device 003: ID 058f:6366 Alcor Micro Corp. Multi Flash Reader
Bus 002 Device 007: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
Bus 003 Device 003: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth
Bus 003 Device 002: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
有没有一种方法可以这样输出它:

Bus   Device   ID           Device Name
002   003:     058f:6366    Alcor etc etc...
002   007:     148f:5370    ...
003   003:     ...          ... 
003   002:     ...          ...
一定有更简单的办法! 提前欢呼

echo $(usb_details2)
这将根据shell使用
IFS
默认值的规则,将
usb\u details2
的所有输出合并为一行。要保留嵌入的换行符,请使用引号:

echo "$(usb_details2)"
(由于规则的原因,后面的换行符仍将被删除。)

更简单的是:只要回显或打印命令的精确输出,就不必使用命令替换

usb_details2
看起来您希望打印第2、4、6列以及第7列到最后一列。下面介绍如何使用单个管道和awk来完成此操作

usb_details2() {
  lsusb | grep -v Foundation | awk '
    BEGIN {
      printf "%s\t%s\t%s\t\t%s\n", "Bus", "Device", "ID", "Device Name"
    }
    {
      printf "%s\t%s\t%s\t", $2, $4, $6
      for(i=7; i<=NF; i++) printf "%s ", $i
      printf "\n"
    }'
}

usb_details2
usb_details2(){
Lasb*GRIP-V基金会AWK
开始{
printf“%s\t%s\t%s\t\t%s\n”、“总线”、“设备”、“ID”、“设备名称”
}
{
printf“%s\t%s\t%s\t”、$2、$4、$6

for(i=7;我不需要
grep-v|awk
使用
$0!~/Foundation/{…}
为回复干杯。我猜它需要一个for循环,但不知道你可以这样做!再次感谢。