Bash 将参数传递给表达式并从中获取输出?

Bash 将参数传递给表达式并从中获取输出?,bash,shell,Bash,Shell,我目前有以下脚本: var_name=`cat X | grep Y` 其中X和Y是一个文件名和一些字符串。我想让它变得通用,并将X和Y转换为脚本传递的第一个和第二个参数。我试过了 var_name=`cat $1 | grep $2` 及 但两者都不起作用 正确的方法是什么?如评论中所建议的,您可以使用bash-x进行调试,以查看发生了什么。同样如前所述,不需要cat,但仍能产生结果。这里有一个简短的测试。也许你会修改你的帖子,展示你的完整计划 $>cat uuoc.sh #!/bi

我目前有以下脚本:

var_name=`cat X | grep Y`
其中X和Y是一个文件名和一些字符串。我想让它变得通用,并将X和Y转换为脚本传递的第一个和第二个参数。我试过了

var_name=`cat $1 | grep $2`

但两者都不起作用


正确的方法是什么?

如评论中所建议的,您可以使用bash-x进行调试,以查看发生了什么。同样如前所述,不需要cat,但仍能产生结果。这里有一个简短的测试。也许你会修改你的帖子,展示你的完整计划

$>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)

欢迎来到堆栈溢出。请尽快阅读这篇文章。您尝试的两种变体都适用于参数
$1
$2
中没有空格或shell元字符的简单情况;第二个(带双引号)在一般情况下比第一个好。您应该使用
$(…)
而不是反勾号,但这不会影响您在此处看到的内容。你试了什么?你怎么知道它不起作用?当您运行
bash-x您的_脚本/etc/passwd root
时,您看到了什么?另外请注意,还有一个UOOC奖等待着您
var_name=$(grep“$2”“$1”)
应该可以做到这一点。@JonathanLeffler-uooc?谢谢。这个简单的测试实际上是有效的。我肯定在别的地方做错了什么。谢谢你的回复@hd1:我没有意识到Google不起作用:D-对Cat的无用使用。你仍然应该在变量插值周围使用双引号,否则
/uuoc.sh文件“两个词”
将失败。
$>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)