linux - bash 脚本 - 执行 find 命令没有输出

标签 linux bash shell find

我完全是 bash 的菜鸟,所以这很可能是一个语法错误,但我在搜索中找不到任何适合我的语法的内容。

从终端,运行
找到。 -名称“*g*”
结果在

./.grepdir.sh.swp  
./grepdir.sh

但是,运行名为 grepdir.shbash 脚本

#!/usr/bin/bash
startdir="$1";
pattern="$2";
find_cmd="find $startdir -name \"$pattern\"";
echo "$find_cmd";

cmd="$($find_cmd)";
echo "$cmd";

从终端作为 grepdir.sh 。 "*g*" 结果:

[user@pc~/dir]$ grepdir.sh . "*g*"
find . -name "*g*"

[user@pc~/dir]$

表示cmd 必须为空。但是根据我的理解,find_cmd中存储的字符串被执行,输出被捕获到cmd,这意味着它不应该为空。是我有误解,还是我的语法太糟糕了?

谢谢

最佳答案

您的脚本版本的问题是您添加的引号实际上成为要查找的参数的一部分。因此,您要求它搜索字面上包含带引号的 "*g*" 的文件名。

如果您放弃添加引号而只说 find_cmd="find $startdir -name $pattern"; 那么它适用于不包含特殊字符的模式。然后我想也许这会起作用:

grepdir.sh . \*g\*

甚至

grepdir.sh . \\\*g\\\*

但是没有。这些事情总是很棘手....

编辑:啊哈,这个版本似乎有效:

#!/usr/bin/bash
startdir="$1";
pattern="$2";
find_cmd="find $startdir -name $pattern";
echo "$find_cmd";

GLOBIGNORE=$pattern
cmd="$($find_cmd)";
echo "$cmd";

关于linux - bash 脚本 - 执行 find 命令没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29588515/

相关文章:

linux - 如何检查 GIT 是否已完全克隆存储库?

java - 由 shell 命令组成的程序应该用 java 编写吗?

linux - 在 Linux 服务器中运行 Excel 宏

python - 为什么要在 bash 脚本中嵌入 repo 命令?

bash - 我如何获得与 Bash 中的 if 构造相反的内容?

检查 X11 扩展名

perl - 使用 perl 或任何方法将搜索模式之间的所有行打印到不同的文件中

linux - 在较新的系统上构建较旧的 GLIBC

bash 将 EOF 重定向到变量

java - 当我在java中运行sshpass命令时找不到它