2016-07-25 92 views
1

我有可變unix shell腳本語法問題?

net_connect="@oradb" 

所以我試圖存儲在另一個環境變量值,而不@字符的環境

所以這樣做似乎工作:

echo "test=" $net_connect | cut -d "@" -f2 
test=oradb 

現在,如果我這樣做我得到:

SID=`$net_connect | cut -d "@" -f2` 
echo "SID=" $SID 
SID= 

爲什麼我的輸出空白?

+0

你的第一行關聯這樣的命令:PIPE'echo test = $ net_connect' STDOUT INTO'cut -d @ -f2' STDIN。我不知道它是如何在你的shell中工作的。礦井返回'oradb' – Pandaiolo

回答

4

要卸下@,使用前綴移除

$ net_connect="@oradb" 
$ sid="${net_connect#@}" 
$ echo "$sid" 
oradb 

注:

  1. 一般而言,${variable#prefix}variable除去水珠prefix。欲瞭解更多信息,請打開man bash並在Remove matching prefix pattern上搜索

  2. 在shell中,最好的做法是用混合或小寫來命名變量。如果您使用大寫變量名稱,那麼您最終會錯誤地覆蓋系統變量之一,結果將會令人不快。

  3. 下面的命令不會做你希望是什麼:

    SID=`$net_connect | cut -d "@" -f2` 
    

    它運行命令併發送標準輸出到cut。但是,有可能是沒有這樣的命令shell將發出一個錯誤,例如:因爲你在執行

    sid=$(echo "$net_connect" | cut -d "@" -f2) # This works but prefix removal is simpler 
    
2

bash: @oradb: command not found 

如果你真的想使用cut,然後的變量,而不是附和它:

$net_connect | etc...

歸結到

@oradb | etc... 

這是一個語法錯誤。您沒有名爲@oradb的命令/二進制文件。

也許你想

SID=`echo $net_connect | cut -d "@" -f2` 

代替。