如何在 Shell 函数中使用带有引号和分号的命令

How to use commands inside Shell function while having quotes and semicolon

我从 google 那里借用了下面的代码并做了一些修改,但不知何故它没有给出预期的输出。

Shell 函数:

remote_collect() {
    target_host=
    {
        read -r rhelInfo
        read -r perlInfo
    } < <(
          ssh -i my_connect "root@${target_host}" \
              -o StrictHostKeyChecking=no -o PasswordAuthentication=no \
              /bin/bash <<-EOF
              cat /etc/redhat-release | awk 'END{print $7}'
              #rpm -qa --last | awk '/kernel-[0-9]/'|head -1
              rpm -qa --last | awk '/kernel-[0-9]/{ first=; =""; print [=11=] }'
EOF
          ) 2>/dev/null

问题出在哪里:

在上面的函数中,命令 rpm -qa --last | awk '/kernel-[0-9]/{ first=; =""; print [=12=] }' 不会产生任何东西,而 运行 作为脚本,但是如果我使用 rpm -qa --last | awk '/kernel-[0-9]/'|head -1 那么它就可以完美地工作,所以,我遗漏了一些东西想逃避什么?

请帮助我理解或解决这个问题。

您应该转义所有 $ 序列才能工作,它应该会工作。

请尝试以下。

rpm -qa --last | awk '/kernel-[0-9]/{ first=$1; $1=""; print $0 }'