【问题标题】:Command Not Found when assigning an integer variable from another script从另一个脚本分配整数变量时找不到命令
【发布时间】:2022-01-05 16:31:53
【问题描述】:

为了说明我的问题和问题,请考虑两个脚本。

Script1.sh

#!/bin/sh
test=1
echo $test

Script2.sh

#!/bin/sh
$(Script1.sh)

当我直接通过 ./Script1.sh 从命令行运行 Script1.sh 时,它会产生所需的输出。

1

但是,当我运行调用 Script1.sh 的 Script2.sh 时,却收到以下错误消息:

Script2.sh:第 1 行:1:找不到命令

出于某种奇怪的原因,它认为整数 1 是一个命令?

我找到了一种廉价的解决方法,即从第一个脚本设置一个变量并将其作为参数传递给第二个脚本,但我想了解为什么会失败。

另外,当我将变量值从 1 更改为“一些文本”时,我希望我的回显会在屏幕上打印“一些文本”。但是当我调用 Script2.sh(最终只调用 Script1.sh)时,它不会将回声打印到屏幕上。为什么会这样,我该如何解决它,以便我可以看到 echo 输出,就像我直接调用 Script1.sh 一样?

任何建议将不胜感激。

【问题讨论】:

  • 你得到了这种效果,因为这就是$( ) 的意思。它接受封闭命令的输出,并且基本上将其视为当前命令的一部分。因此,ls $(Script1.sh) 将扩展为ls 1,它将尝试列出名为“1”的文件。所以你所拥有的,$(Script1.sh),扩展为只是 1,它尝试将“1”作为命令运行。

标签: linux bash shell


【解决方案1】:

您使用命令替换将其称为错误。如果需要,只需使用source 或子shell:

. ./Script1.sh
( ./Script1.sh )

第二个有点多余,因为它总是会在另一个 shell 中运行,所以这样会更有意义:

( . ./Script1.sh )

【讨论】:

  • 感谢您的提示。我相信我现在应该准备好了。
猜你喜欢
  • 1970-01-01
  • 2020-10-10
  • 2018-03-17
  • 2010-12-15
  • 2019-03-31
  • 2013-03-06
  • 1970-01-01
  • 2019-03-03
  • 2020-06-09
相关资源
最近更新 更多