2017-02-20 40 views
0

我創造了我的基本變量從讀取命令的命令使用一個變量(我已經手工完成這一點,並使用腳本):如何在是創造另一個變量

read NAME 

然後我想使用NAME變量來搜索文件,並創建另一個變量:

STUDENT=$(grep $NAME <students.dat | awk -F: '/$NAME/ {print $1}') 

如果我手動運行該命令從students.dat文件(而不是$ NAME)的實際名稱,它執行並顯示我想要的。但是,當我運行此命令(手動或從腳本使用$NAME),它返回空白,我不知道爲什麼。

回答

1

殼變量不插入單引號,只有雙引號。

STUDENT=$(grep $NAME <students.dat | awk -F: "/$NAME/ {print \$1}") 

$1需要進行轉義,以確保它不是由shell擴展,但AWK。

+0

與'-v'選項是更安全的傳遞'$ NAME'值。 – chepner

+0

美麗!那樣做了。謝謝! – SuperheroSmith

+0

在傳遞給'grep'的時候,把$ NAME放在雙引號中最好。另外,使用'--'來防止由$ NAME中任何前導'-'造成的失敗。所以,'grep - 「$ NAME」'好得多。 – codeforester

2

@ user1615415:嘗試:

cat script.ksh 
echo "Enter name.." 
read NAME 
STUDENT=$(awk -vname="$NAME" -F: '($0 ~ name){print $3}' student.dat) 
相關問題