2013-04-28 100 views
0

我現在有以下腳本:將參數傳遞給表達式並從中獲取輸出?

var_name=`cat X | grep Y` 

,其中X和Y是一個文件名和一些字符串。我想做這個概要,並將X和Y轉換爲腳本的第一個和第二個參數傳遞。我試圖

var_name=`cat $1 | grep $2` 

var_name=`cat "$1" | grep "$2"` 

但既不工程。

這樣做的正確方法是什麼?

+2

歡迎來到Stack Overflow。請儘快閱讀[常見問題]。你所嘗試的兩種變體應該適用於參數'$ 1'和'$ 2'中沒有空格或shell元字符的簡單情況;第二個(帶雙引號)比第一個用於一般用途要好。你應該使用'$(...)'而不是back-ticks,但是這不應該影響你在這裏看到的。你嘗試了什麼?你怎麼知道它不起作用?當你運行'bash -x your_script/etc/passwd root'時,你看到了什麼? – 2013-04-28 01:29:00

+1

另請注意,有一個UUOC獎等待着你。 'var_name = $(grep「$ 2」「$ 1」)'應該做的。 – 2013-04-28 01:32:21

+0

@JonathanLeffler UUOC? – hd1 2013-04-28 01:38:18

回答

1

正如評論中所建議的那樣,您可以使用bash -x進行調試以查看發生了什麼。同樣如上所述,貓不是必需的,但仍然會產生結果。這是一個簡短的測試。也許你修改你的帖子並顯示你的實際完整程序。

$>cat uuoc.sh 
#!/bin/sh 
var_name=`cat "$1" | grep "$2"` 
echo Result 1: 
echo $var_name 
var_name=`grep "$2" "$1"` 
echo Result 2: 
echo $var_name 

$>cat myfile.txt 
file 
with 
pattern (1) 
just 
for 
pattern (2) 

$>./uuoc.sh myfile.txt pattern 
Result 1: 
pattern (1) pattern (2) 
Result 2: 
pattern (1) pattern (2) 
+0

您仍然應該在變量插值周圍使用雙引號,否則使用''。 /uuoc.sh文件「兩個字」將失敗。 – tripleee 2013-04-28 12:06:18

+0

好點。我做了一個編輯。 – hol 2013-04-28 14:59:51

相關問題