我正在编写适用于文件的shell脚本。我需要找到文件并用一些重要的信息打印出来。这没有问题......但后来我想添加一些“功能”并使其与参数一起使用。其中一个功能是忽略一些匹配patterm的文件(如* .c - 忽略所有c文件)。所以我设置变量并在其中添加字符串。
#!/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的beacouse,但在其他机器上,ksh在哪里,同样的问题并且#!/bin/sh
改为#!/bin/bash
也没有帮助。
答案 0 :(得分:0)
包含参数的命令行在执行之前由shell处理。因此,当您运行脚本时,命令将为grep -Ev "c"
,当您运行单个命令grep -Ev "c"
时,shell会将此命令解释为grep -Ev c
。
您可以使用此命令进行检查:echo grep -Ev "c"
。
所以,只需删除$ command中的引号,一切都会好的)
答案 1 :(得分:0)
您只需要修改命令值:
command="grep -Ev "$1