【问题标题】:Shell script to read line from TXT and assign to env variable?从 TXT 读取行并分配给 env 变量的 Shell 脚本?
【发布时间】:2021-11-24 07:55:06
【问题描述】:

我有一个名为 VERSION.txt 的文本文件,其中只有一行内容:

2.0.5

我想使用一个 shell 脚本来读取该版本号并将其分配给一个环境变量,如下所示:

export APP_VERSION='2.0.5'

这已经是我能做到的最接近了。

input="VERSION.txt"
while IFS= read -r line
do
    export APP_VERSION=$line

echo 'App version is' ${APP_VERSION}
done < "$input"

这似乎可行,但是当我 echo $APP_VERSION 时,我得到一个空白结果。

有什么建议吗?

【问题讨论】:

  • 这段代码当然应该将文件的最后一行留在APP_VERSION 变量中。也就是说,您在哪里使用echo 检查变量是否已填充?请记住,导出变量仅适用于该进程及其子进程;它不适用于父进程(也就是说,启动您的脚本的程序)。
  • 另外,请注意,echo "App version is ${APP_VERSION}" 会更正确——您希望参数扩展位于双引号内,而不是在未引用的上下文中。否则,如果APP_VERSION='*'echo 将在当前目录中写入文件名列表,而不是 *。另见I just assigned a variable, but echo $variable shows something else!

标签: bash shell environment-variables


【解决方案1】:
input="VERSION.txt"
export APP_VERSION=$(cat "$input")
echo "App version is ${APP_VERSION}"

【讨论】:

  • 当我阅读问题时,OP 只希望读取一行,而不是整个文件。也许用head -n 1 替换cat,或者只是用非循环read -r APP_VERSION &lt;"$input" &amp;&amp; export APP_VERSION 替换整个事情?
  • @CharlesDuffy 我读到的问题是说文件只有一行,这意味着没有必要逐行读取。也许 OP 没有考虑只读取整个文件。
  • 可能。也就是说,只要 OP 将他们的问题描述为在循环完成后没有设置变量(并且他们没有报告任何 App version is 输出,正如预期的那样,最后的空白行覆盖了非空白值从第一行开始),我怀疑真正的问题是完全不同的东西,这甚至没有试图解决——f/e,期望export 使启动脚本的 shell 能够看到变量脚本集。
  • 谢谢赛勒斯,成功了。我什至没有考虑将整个文件读出来,因为你是对的,只有一行。非常感谢。
  • @Cyrus :OP 正在使用 bash。也许export APP_VERSION=$(&lt;$input) 更适合 bash。
猜你喜欢
  • 2021-02-22
  • 2023-03-30
  • 1970-01-01
  • 2017-04-16
  • 2013-08-24
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 2022-11-05
相关资源
最近更新 更多