变量作为 shell 命令
variable as shell command
我正在编写 shell 处理文件的脚本。我需要找到文件并为我打印一些重要信息。那没问题...但是后来我想添加一些 "features" 并使其也可以与参数一起使用。其中一项功能是忽略一些匹配模式的文件(如 *.c - 忽略所有 c 文件)。所以我设置了变量并在其中添加了字符串。
#!/bin/sh
command="grep -Ev \"\"" # 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
也没有帮助。
包含参数的命令行在执行前由shell处理。因此,当您 运行 编写脚本时,命令将是 grep -Ev "c"
,而当您 运行 单个命令 grep -Ev "c"
shell 时,会将此命令解释为 grep -Ev c
。
您可以使用此命令进行检查:echo grep -Ev "c"
。
所以,只需删除 $command 中的引号,一切都会好起来的)
只需修改命令值即可:
command="grep -Ev "
我正在编写 shell 处理文件的脚本。我需要找到文件并为我打印一些重要信息。那没问题...但是后来我想添加一些 "features" 并使其也可以与参数一起使用。其中一项功能是忽略一些匹配模式的文件(如 *.c - 忽略所有 c 文件)。所以我设置了变量并在其中添加了字符串。
#!/bin/sh
command="grep -Ev \"\"" # 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
也没有帮助。
包含参数的命令行在执行前由shell处理。因此,当您 运行 编写脚本时,命令将是 grep -Ev "c"
,而当您 运行 单个命令 grep -Ev "c"
shell 时,会将此命令解释为 grep -Ev c
。
您可以使用此命令进行检查:echo grep -Ev "c"
。
所以,只需删除 $command 中的引号,一切都会好起来的)
只需修改命令值即可:
command="grep -Ev "