Linux:从 set 命令到 bash 文件的解析器变量

Linux:从 set 命令到 bash 文件的解析器变量

我正在尝试将变量从set命令传递到bash脚本。

$ set BeginTime=2021-10-11 2:23:00 & ./getBeginTime.sh

文件getBeginTime.sh

local getBeginTime=$(set | grep BeginTime)
echo "BeginTime : = $getBeginTime"

请解释为什么echo $getBeginTime返回空字符串

答案1

您的代码中存在许多误解

  1. 直接分配一个变量,不带set,记住引用被分配的字符串,如果它包含空格或其他 shell 特有的字符(如果有疑问,引用)

    BeginTime='2021-10-11 2:23:00'
    
  2. 不要在小时候运行作业。子进程不能影响其父进程。通过运行分配,&您可以在子进程中分配值,该子进程会立即退出,而父进程保持不变

  3. 该值尚未提供给环境(使用export),因此要将其传递给脚本,您应该将其包含在命令行中:

    ./getBeginTime.sh "$BeginTime"
    

    然后,您可以在脚本中选取该值作为第一个参数:

    #!/bin/sh
    getBeginTime="$1"
    echo "BeginTime : = $getBeginTime"
    

    编写该语句的更好方法echo是使用printf.该echo命令在 shell 中是非标准的,并且不同的实现以不同的方式处理某些字符序列。另一方面printf更加标准化。这里是与您的变量%s对应的参数的占位符"$getBeginTime"

    printf "BeginTime : = %s\n" "$getBeginTime"
    

如果您确实想将值作为环境变量传递,下一节将说明两种方法,但请注意,这些是传递值的不太常见的方法:

# Define an environment variable just for this invocation
BeginTime='2021-10-11 2:23:00' ./getBeginTime.sh

或者

# Define an environment variable for the remainder of this session
export BeginTime='2021-10-11 2:23:00'

# You can now use it as many times as you want
./getBeginTime.sh
./getBeginTime.sh

在您的代码中,您只需将其用作"$BeginTime"变量即可。

答案2

以下是实现此目的的两种方法:

1.使用环境变量:

从 bash 终端设置变量:

export BeginTime="2021-10-11 2:23:00"

然后从一个非常简单的脚本中test.sh调用该变量:

[ws] user test_directory >cat test.sh

echo $BeginTime

2. 通过传递参数:

该脚本test.sh现在只是:

[ws] user test_directory >cat test.sh

echo $1

你用参数来称呼它:

[ws] user test_directory > bash test.sh "2021-10-11 2:23:00"

相关内容