我完全是 bash 的菜鸟,所以这很可能是一个语法错误,但我在搜索中找不到任何适合我的语法的内容。
从终端,运行
找到。 -名称“*g*”
结果在
./.grepdir.sh.swp
./grepdir.sh
但是,运行名为 grepdir.sh
的 bash 脚本
#!/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/