将参数传递给表达式并从中获取输出?
问题描述:
我现在有以下脚本:将参数传递给表达式并从中获取输出?
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