【问题标题】:Why is echo showing the command itself and not the command output为什么 echo 显示命令本身而不是命令输出
【发布时间】:2024-01-22 19:53:01
【问题描述】:

为什么在我开始在 FOR I 循环中使用 echo 时显示的是命令而不是命令的输出?例如此命令有效

root@linux1 tmp]# iscsiadm -m node |awk '{print $1}'
192.168.100.88:326

但不在 FOR I 循环中

[root@linux1 tmp]# for i in 'iscsiadm -m node | awk '{print $1}'';do echo $i;done
iscsiadm -m node | awk {print
}

我希望命令打印第一个字段,这样我就可以向 For I 循环添加其他功能。谢谢

编辑——不知道为什么我在这个问题上被否决了。请指教。

【问题讨论】:

  • 我猜你被否决了,因为你的行有明显的错误,可以通过学习基本的 shell 脚本很容易地修复,也许通过问自己“我如何循环一个进程的输出”并找到所有可用资源中的答案。如果您对找到的内容不满意,或者您无法使其发挥作用,那么(并且只有在那时)提出问题。
  • 在您可能会看到的答案中:while read -r i _; do echo "$i"; done < <(iscsiadm -m node),这是正确答案。
  • 感谢您的反馈。我很欣赏你的观点。我从事 IT 专业 15 年,能够自学。因此,我正在自学编程。然而,我的大脑是这样连接的(还),所以我发现这些答案并不明显。一旦你知道答案是显而易见的,但一开始很难。如果你问我,让人们把它推到你脸上有点势利。但无论哪种方式,我都感谢那些发布有用回复的人。

标签: linux bash centos


【解决方案1】:

您没有执行iscsiadmawk 命令,因为您引用了它;这使它成为一个文字字符串。要将命令的输出替换回命令行,请使用$(...)

for i in $(iscsiadm -m node |awk '{print $1}'); do
    echo $i
done

【讨论】: