Bash

在列中列印多行變數

  • January 21, 2022

我有一個從集群中收集值的腳本。在某些情況下,這些值具有多行。我有一個 printf 格式,它指定數據的定位方式,但是它沒有考慮多行,因此間距是傾斜的。

The data should look like this:

Service Group          AutoStart List          System List
foo                    sys1                    sys1
                      sys2                    sys2

相反,它看起來像這樣

Service Group          AutoStart List          System List
foo                    sys1                    
sys2                    sys1
sys2

AutoStart List 和 System List 應該是相同的,但是不管這個事實,我還沒有弄清楚如何將值強製到正確的列中。

sgheader="\n\033[4m\033[1m%-30s %-30s %-15s\033[0m\033[0m"
sgformat="\n%-30s %-30s %-15s"



printf "${sgheader}" "Service Group" "Autostart List" "System List" 
printf "${sgformat}" "${svcgroup}" "${autostrtlist}" "${hosts}"

也許是這樣的:

svcgroup='foo' autostrtlist=$'sys1\nsys2' hosts=$'sys1\nsys2'
paste <(printf '%s\n' "$svcgroup") \
     <(printf '%s\n' "$autostrtlist") \
     <(printf '%s\n' "$hosts") | expand -t30

(ksh93/zsh/bash 語法)。或者,POSIXly,在具有以下功能的系統上/dev/fd/x

paste /dev/fd/3 3<<E3 /dev/fd/4 4<<E4 /dev/fd/5 5<<E5 | expand -t 30
$svcgroup
E3
$autostrtlist
E4
$hosts
E5

除了和最新版本之外dash,該版本使用臨時文件而不是由子shell 提供的管道,因此可能更有效(除了更便攜)。yashbash

引用自:https://unix.stackexchange.com/questions/138816