从脚本运行时,Bash脚本不设置变量,但在提示符下工作正常

时间:2010-06-30 20:24:52

标签: bash

为什么以下工作从提示符开始但在卡在bash脚本中时失败? bash脚本生成一个空行,使我相信该变量未被设置:

echo "red sox" | read my_var
echo $my_var

更新:因为我猜我的例子不起作用,我真正想要做的就是把I / O管道输入一个变量,这样我就可以用它来做。我该怎么做呢?我认为这应该由read命令处理,但也许还有另一种方式?

6 个答案:

答案 0 :(得分:4)

如果你问这个问题是因为你从一个更普遍的问题中简化了,例如:

someprog args | read my_var

您应该使用command substitution

my_var=$(someprog args)

答案 1 :(得分:2)

您可以使用反引号或$()语法将命令的输出存储在变量中:

my_var=`cat /some/file.txt`

现在/some/file.txt的内容存储在$ my_var中。同样的事情,语法不同:

my_var=$(cat /some/file.txt)

答案 2 :(得分:2)

读取的原因在管道中不起作用就是它创建子shell。子shell中设置的变量不会持久保存给父母。见BashFAQ/024

答案 3 :(得分:1)

它在提示符下不起作用。我的猜测是你已经在你的CLI中设置了my_var,并且只是在提示符下检索它。

试试这个:

$ my_var =“没什么”; echo“red sox”|读my_var; echo $ my_var

答案 4 :(得分:0)

如果您希望my_var变量具有常量值,就像在您的问题中一样,为什么不这样做:

my_var="red sox"

答案 5 :(得分:0)

你想做什么?请解释一下你不想做的事情。

如果您正在尝试设置变量,这就是您所需要的:

my_var="red sox"
echo $my_var

如果您需要全局,则应将其设置为env:

export my_var