【问题标题】:Using "source" command to fetch variables giving unexpected output使用“source”命令获取提供意外输出的变量
【发布时间】:2019-05-19 23:39:35
【问题描述】:

我正在设置一个使用来自另一个脚本的变量的脚本。

脚本 1 有变量

脚本 2 获取脚本 1 并输出意外错误。

通过 GCP 安装全新的 Debian 9。

1.sh

1="test"
2="test2"
3="test3"

2.sh

source 1.sh
echo $1
echo $2
echo $3

运行 2.sh,我预计:

test
test2
test3

但我收到了:

1.sh: line 2: 1=test: command not found
1.sh: line 3: 2=test2: command not found
1.sh: line 4: 3=test3: command not found
#empty line#
#empty line#
#empty line#

This link 告诉我 bash 变量是这样声明的。

我该如何解决这个问题?

【问题讨论】:

  • 但链接在于如何以这种方式分配变量名称。您是否曾经在 bash 中尝试过 1="test"manually ?您还将收到 command not found 错误。你不能像这样设置位置参数。

标签: php bash debian


【解决方案1】:

123 不是有效的变量名。 $1 等用于访问传递给脚本的参数,但不能将它们分配给普通变量。尝试改用 var1="test" 之类的东西。

另外,我建议在 2.sh 的开头添加一个 shebang 行(例如 #!/bin/bash#!/usr/bin/env bash)。 1.sh 没关系,因为sourceing 脚本不关注 shebang 行。

哦,我忘了另一件事:当你使用一个变量(或参数,或其他什么)时,你几乎应该总是在它周围加上双引号(例如,使用echo "$var1" 而不仅仅是echo $var1)。当您使用不带双引号的变量时,shell 将尝试以更可能导致麻烦而不是帮助的方式对其进行解析。

最后:尤其是刚开始时,尝试将脚本粘贴到 shellcheck.net 中——它可以很好地发现常见的脚本错误,并且可以在它们变成坏习惯之前指出它们。

【讨论】:

  • 你是个传奇。
猜你喜欢
  • 2020-03-22
  • 2021-09-16
  • 1970-01-01
  • 2018-02-02
  • 2012-10-08
  • 2012-09-26
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多