2010-01-31 67 views
1

我想設置一個別名,像這樣:CMDLINE擊變怪誕

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. 

回答

2

該問題與別名無關。簡單運行

$ TEST=ok echo $TEST 

$ 

不會回顯任何內容(除了換行符),因爲$ TEST在echo命令運行之前由shell展開。

三件事在聲明中發生的順序如下:

  1. $TEST擴展
  2. TEST分配 'OK'
  3. echo執行(與TEST = OK在其環境中)

按照ghostdog74(TEST=ok ; echo $TEST)原因建議在分配和回顯命令之間放置一個分號es分配是在echo命令之前執行的單獨的shell命令。第二個命令可以將shell擴展爲$TEST,因爲它已經被設置。

1

你忘了分號

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

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裏面的環境。

+0

謝謝你們!我試過它從命令行,並認爲它已經工作W/O';'但我想這是一個錯誤,我沒有首先解決變量問題! – jay 2010-02-06 22:03:28