Linux 如何将命令输出存储在变量中,而不是仅存储在一行上?

Linux 如何将命令输出存储在变量中,而不是仅存储在一行上?,linux,bash,shell,Linux,Bash,Shell,命令输出存储在变量中。目前,我的脚本在一行上输出所有内容,而不是在多行上分开。这不是我想要的,因为这样它看起来杂乱无章,很难阅读。如何将命令输出存储在变量中,以便将其打印到多行而不是一行 #! /bin/bash #User input echo -n 'Enter IP: ' read IP #Scanning the Ports ports=$( nmap -sS $IP | grep open) #Output echo $ports 例如: 它当前输出的内容 21/tcp ope

命令输出存储在变量中。目前,我的脚本在一行上输出所有内容,而不是在多行上分开。这不是我想要的,因为这样它看起来杂乱无章,很难阅读。如何将命令输出存储在变量中,以便将其打印到多行而不是一行

#! /bin/bash

#User input
echo -n 'Enter IP: '
read IP

#Scanning the Ports
ports=$( nmap -sS $IP | grep open)

#Output
echo $ports
例如:

它当前输出的内容

21/tcp open ftp 22/tcp open ssh 23/tcp open telnet
我希望它输出什么

21/tcp open ftp 
22/tcp open ssh 
23/tcp open telnet

你需要使用引号

echo "$ports"
当bash看到没有引号的行时,它将执行单词拆分。换句话说,就好像你执行了:

echo 21/tcp open ftp\
22/tcp open ssh\
23/tcp open telnet

它对换行符的处理与对空格的处理没有区别,并将每个参数传递给echo。然后写入每个参数,用一个空格分隔。

您需要使用引号

echo "$ports"
当bash看到没有引号的行时,它将执行单词拆分。换句话说,就好像你执行了:

echo 21/tcp open ftp\
22/tcp open ssh\
23/tcp open telnet
它对换行符的处理与对空格的处理没有区别,并将每个参数传递给echo。然后,它写入每个参数,并用一个空格分隔