2016-03-15 142 views
0

我正在编写使用文件的shell脚本。我需要找到文件并为我打印一些重要的信息。多数民众赞成没问题......但是,我想添加一些“功能”,并使其与参数一起工作。其中一项功能是忽略一些与patterm匹配的文件(如* .c - 忽略所有c文件)。所以我设置了变量并添加了字符串。变量作为shell命令

#!/bin/sh 
command="grep -Ev \"$2\"" # in 2nd argument is pattern, that will be ignored 
echo "find $PWD -type f | $command | wc -l" # printing command 
file_num=$(find $path -type f | $command | wc -l) # saving number of files 
echo "Number of files: $file_num" 

但是,命令以某种方式忽略我的变量并计算所有文件。但是,当我将相同的命令放入bash或shell时,我得到不同数量(正确的)文件。我虽然,它可能只是bash的,但在其他机器上,ksh在哪里,同样的问题和#!/bin/sh#!/bin/bash也没有帮助。

+0

参见[此FAQ](http://mywiki.wooledge.org/BashFAQ/050)。 –

+0

reg的价值是什么? –

+0

@AliissA有souhld是$命令,对不起... – Tehryn

回答

0

包含参数的命令行在执行前由shell处理。因此,当您运行脚本时,该命令将为grep -Ev "c",并且当您运行单个命令grep -Ev "c"时,shell会将此命令解释为grep -Ev c。您可以使用此命令来检查它:echo grep -Ev "c"。 所以,只要删除$命令报价,一切都会好起来)

+0

你救了我的命,谢谢bro:D – Tehryn

0

你只需要修改指令值:

command="grep -Ev "$1 
相关问题