【发布时间】: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”作为命令运行。