在 bash 中回显特定单词

在 bash 中回显特定单词

基本上,我在 bash 中有一堆命令向我的机器询问它的信息。

喜欢:

> host=$(hostname -A) 
hostname=$(hostname -I) 
Pub_IP=$(dig +short
myip.opendns.com @resolver1.opendns.com) 
Kernel_Version=$(uname -v | awk -F"Debian" '{print $2}' | cut -d ' ' -f2 | cut -d '-' -f1)
Deb_Version=$(cat /etc/debian_version)

我也附和一下

echo $host $hostname  $Pub_IP  $Kernel_Version $Deb_Version > info.txt

我需要弄清楚如何|在每个参数之间放置。所以如果我查看我的 info.txt 文件,它看起来像

 | debianmachine | output_of_hostname | output_of_Pub_IP |

另外,我可以通过打印来做到这一点吗?

答案1

如果您引用或转义字符串,则可以包含管道:

echo "| ${host} | ${hostname} ..."

您当然printf也可以使用(我认为这就是您在问题末尾所问的问题):

printf '| %s | %s | %s ...' "${host}" "${hostname}" "${Pub_IP}" ...

您可以利用 的printf重复行为来简化格式字符串:

printf '| %s ' "${host}" "${hostname}" "${Pub_IP}" ...; printf '|\n'

这将| %s根据需要多次重复该序列,并以管道符和回车符结束该行。

答案2

使用printf

printf '| %s | %s | %s | %s | %s |\n' "$host" "$hostname" "$Pub_IP" "$Kernel_Version" "$Deb_Version" >info.txt

%s格式字符串中的(printf的第一个参数) 是字符串占位符,其中每个占位符都将被依次printf给出的其他参数替换。printf

答案3

一种想法可能是将所有变量存储在一个数组中,并在循环中根据所需的修改将它们打印出来。

不过,我认为 shell 的字符串连接更有效、更简单,例如:

echo "| $host | $hostname | $Pub_IP | $Kernel_Version | $Deb_Version |" > info.txt

另一种方法是使用简单的 awk 循环来按程序创建文件的内容,例如:

awk '{print "|"\
 for (i=1 ; i <= NF ; i++) \
   print " ", $i, " |"}' \
 info.txt | xargs -11 > info.txt

相关内容