Cmdline Bash变量怪异

时间:2010-01-31 09:56:36

标签: macos bash command-line environment-variables

我想设置一个像这样的别名:

alias hi='TEST=ok echo $TEST'

但是,它似乎无法可靠地运作。

我从:

开始
unalias hi
unset TEST

然后:

$ alias hi="TEST=ok echo $TEST"
$ hi
$ 

这是在MacOSX上:

$ bash --version
GNU bash, version 3.2.17(1)-release (i386-apple-darwin9.0)
Copyright (C) 2005 Free Software Foundation, Inc.

3 个答案:

答案 0 :(得分:2)

问题与别名无关。只需运行

$ TEST=ok echo $TEST

$

不会回显任何内容(换行符除外),因为在运行echo命令之前,shell会扩展$ TEST。

该声明中按顺序发生了三件事:

  1. $TEST已展开
  2. TEST被指定为'ok'
  3. 执行
  4. echo(在其环境中使用TEST = ok)
  5. 按照ghostdog74(TEST=ok ; echo $TEST)的建议在赋值和echo命令之间放置分号会导致赋值为在echo命令之前执行的单独shell命令。然后,shell可以在第二个命令中展开$TEST,因为它已经设置好了。

答案 1 :(得分:1)

你忘记了分号了

alias hi='TEST=ok ;echo $TEST'

答案 2 :(得分:0)

为了完整性:

$ echo 'echo $TEST'>echotest
$ unset $TEST
$ TEST=ok . ./echotest
ok
$ chmod u+x echotest
$ TEST=ok ./echotest
ok
$ echo $TEST
$

在这种情况下,设置TEST=ok会修改脚本echotest的环境,该脚本在其运行之前不会展开其中的$TEST