【问题标题】:Saving the result of an echo command in a shell script?将 echo 命令的结果保存在 shell 脚本中?
【发布时间】:2020-02-13 01:43:18
【问题描述】:

我正在尝试将 echo 命令的结果存储为要在 shell 脚本中使用的变量。 Debian 4.19.0-6-amd64

该命令在终端中有效:echo $HOSTNAME 返回正确的主机名debian-base

我尝试在 shell 脚本中运行它,例如:

#!/usr/bin/bash

CURRENT_HOSTNAME=`echo $HOSTNAME`
echo $CURRENT_HOSTNAME

我尝试过扩展:

CURRENT_HOSTNAME=$(echo $HOSTNAME)

为了覆盖更多基础,我尝试了以下方法:

CURRENT_HOSTNAME=$HOSTNAME
# or
CURRENT_HOSTNAME="$HOSTNAME"
# also, in case a problem with reserved names:
test=$HOSTNAME
test="$HOSTNAME"

在终端中效果很好!输出如下:

root@debian-base:/scripts# echo $HOSTNAME
debian-base
root@debian-base:/scripts# TEST_HOSTNAME=$HOSTNAME
root@debian-base:/scripts# echo $TEST_HOSTNAME
debian-base
root@debian-base:/scripts# TEST_TWO_HOSTNAME=$(echo $HOSTNAME)
root@debian-base:/scripts# echo $TEST_TWO_HOSTNAME
debian-base

只要我运行脚本(如上):

root@debian-base:/scripts# sh test.sh

root@debian-base:/scripts#

我做错了什么?

【问题讨论】:

  • 能否告诉我们echo $HOSTNAME 是否在您的脚本中工作?无需将其分配给变量。

标签: bash shell variables debian echo


【解决方案1】:

您正在使用bash 作为您的终端。 Bash 设置了变量$HOSTNAME。您使用sh 运行您的脚本。 sh 没有$HOSTNAME

选项:

bash test.sh

或者作为程序运行:

chmod +x test.sh
./test.sh

但我认为您需要将第一行更改为:

#!/bin/bash

因为我认为在大多数情况下/usr/bin 中没有安装 bash。但是你需要尝试。要找出 bash 的安装位置,请使用 which bash

另一种选择是使用hostname 二进制文件:

CURRENT_HOSTNAME=$(hostname)
echo $CURRENT_HOSTNAME

适用于 bash 和 sh。

您可以通过运行sh 来启动sh。你会看到它有一个类似 bash 的终端。你可以尝试做echo $HOSTNAME。它不会显示,因为它不存在。您可以使用set 来查看所有变量(因为sh 没有制表符补全,所以很难弄清楚)。

【讨论】:

  • 是的,使用bash 而不是sh 成功了!在 Debian 上,which bash 确实输出了/usr/bin/bash,所以我原来的 shebang 确实显示了正确的路径。假设 shebang 会调用 bash,而不管它是如何被调用的。很高兴我现在知道了。
猜你喜欢
  • 2011-10-21
  • 1970-01-01
  • 2016-08-10
  • 2015-03-04
  • 2018-07-15
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多