2013-04-28 98 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

相关问题