Bash
在列中列印多行變數
我有一個從集群中收集值的腳本。在某些情況下,這些值具有多行。我有一個 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 提供的管道,因此可能更有效(除了更便攜)。yash
bash