【问题标题】:Shell script (assign to variable) not working [duplicate]Shell脚本(分配给变量)不起作用[重复]
【发布时间】:2015-11-04 16:01:27
【问题描述】:
#!/bin/bash
if [ -f "$1" ] #parameter is file name, if i exists...
then
    VARIABLE=`cat "$1"` #assign what's inside into VARIABLE
fi

我试过bash -x script_01.sh "file" 并且追踪工作:

+ '[' -f file ']'
++ cat file
+ VARIABLE='Wednesday, November  4, 2015 04:45:47 PM CET'

但问题是当我回显 $VARIABLE 时,它是空的。你们有任何关于如何使它工作的提示吗?谢谢。

【问题讨论】:

  • 它对我有用。我在脚本末尾添加了echo $VARIABLE,并将其保存在 script.sh 下。如果我运行bash script.sh script.sh,它会按预期回显脚本的内容。
  • 是的,当我在脚本末尾添加 echo 时,它可以工作。但在脚本之外它没有。我猜它在我正在运行的另一个进程中。

标签: bash scripting


【解决方案1】:

VARIABLE 设置在运行脚本的进程中,而不是调用脚本的进程中。如果要在当前环境中设置它,则需要改为 source 文件。

. script_01.sh "file"

【讨论】:

  • 所以如果我理解正确的话,有两个 bash,bash1:我现在使用的那个和 bash2:运行脚本的那个。所以 VARIABLE 将仅在 bash2 中设置为 cat file 而在 bash1 中它不会是任何东西?我不明白第二条路。我确实使用“文件”作为参数,对吧?
  • 对;变量对于它们运行的​​脚本/shell 来说是“本地的”。因此,尽管VARIABLEscript_01.sh 的运行中正确设置,但一旦该脚本退出,它就会消失。
  • 所以为了从脚本中删除它,我必须添加“export VARIABLE”?
  • 不,export 是一种单向过程,用于将信息从父级传递给其子级。孩子无法(按设计)影响其父母的环境,这就是为什么您必须按照我所展示的那样获取文件,以便代码在同一进程中执行。
猜你喜欢
  • 2014-03-07
  • 2013-04-10
  • 2017-04-16
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2012-09-02
  • 2011-11-29
  • 2011-08-24
相关资源
最近更新 更多