为什么以下工作从提示符开始但在卡在bash脚本中时失败? bash脚本生成一个空行,使我相信该变量未被设置:
echo "red sox" | read my_var
echo $my_var
更新:因为我猜我的例子不起作用,我真正想要做的就是把I / O管道输入一个变量,这样我就可以用它来做。我该怎么做呢?我认为这应该由read
命令处理,但也许还有另一种方式?
答案 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