首页 > 解决方案 > 将 echo 命令的结果保存在 shell 脚本中?

问题描述

我正在尝试将 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#

我究竟做错了什么?

标签: bashshellvariablesdebianecho

解决方案


您正在使用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没有制表符完成,所以很难弄清楚)。


推荐阅读