我現在有以下腳本:將參數傳遞給表達式並從中獲取輸出?
var_name=`cat X | grep Y`
,其中X和Y是一個文件名和一些字符串。我想做這個概要,並將X和Y轉換爲腳本的第一個和第二個參數傳遞。我試圖
var_name=`cat $1 | grep $2`
和
var_name=`cat "$1" | grep "$2"`
但既不工程。
這樣做的正確方法是什麼?
我現在有以下腳本:將參數傳遞給表達式並從中獲取輸出?
var_name=`cat X | grep Y`
,其中X和Y是一個文件名和一些字符串。我想做這個概要,並將X和Y轉換爲腳本的第一個和第二個參數傳遞。我試圖
var_name=`cat $1 | grep $2`
和
var_name=`cat "$1" | grep "$2"`
但既不工程。
這樣做的正確方法是什麼?
正如評論中所建議的那樣,您可以使用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)
歡迎來到Stack Overflow。請儘快閱讀[常見問題]。你所嘗試的兩種變體應該適用於參數'$ 1'和'$ 2'中沒有空格或shell元字符的簡單情況;第二個(帶雙引號)比第一個用於一般用途要好。你應該使用'$(...)'而不是back-ticks,但是這不應該影響你在這裏看到的。你嘗試了什麼?你怎麼知道它不起作用?當你運行'bash -x your_script/etc/passwd root'時,你看到了什麼? – 2013-04-28 01:29:00
另請注意,有一個UUOC獎等待着你。 'var_name = $(grep「$ 2」「$ 1」)'應該做的。 – 2013-04-28 01:32:21
@JonathanLeffler UUOC? – hd1 2013-04-28 01:38:18