Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 通过变量向“find-exec”传递命令无效_Bash_Unix - Fatal编程技术网

Bash 通过变量向“find-exec”传递命令无效

Bash 通过变量向“find-exec”传递命令无效,bash,unix,Bash,Unix,给定一个目录$HOME/foo/,其中包含文件 命令: 查找$HOME/foo-type f-exec md5deep-bre{}\ 工作正常,并对文件进行哈希处理 但是,为-exec创建变量似乎不起作用: md5=md5deep-bre 查找$HOME/foo-type f-exec$md5{}\ 返回:find:md5deep-bre:没有这样的文件或目录 为什么?因为变量用双引号括起来,所以整个字符串作为-exec后面的单个标记发送给find,find将其视为命令名。要解决此问题,只需删除

给定一个目录$HOME/foo/,其中包含文件

命令:

查找$HOME/foo-type f-exec md5deep-bre{}\

工作正常,并对文件进行哈希处理

但是,为-exec创建变量似乎不起作用:

md5=md5deep-bre

查找$HOME/foo-type f-exec$md5{}\

返回:find:md5deep-bre:没有这样的文件或目录


为什么?

因为变量用双引号括起来,所以整个字符串作为-exec后面的单个标记发送给find,find将其视为命令名。要解决此问题,只需删除变量周围的双引号:

find "$HOME/foo" -type f -exec $md5 {} \;

通常,将命令存储在shell变量中是不好的。请参阅。

因为变量用双引号括起来,所以整个字符串将作为-exec后面的单个标记发送给find,find将其视为命令名。要解决此问题,只需删除变量周围的双引号:

find "$HOME/foo" -type f -exec $md5 {} \;
通常,将命令存储在shell变量中是不好的。请参阅。

使用数组

md5Cmd=(md5deep -bre)

find "$HOME/foo" -type f -exec "${md5Cmd[@]}" {} \;
使用数组

md5Cmd=(md5deep -bre)

find "$HOME/foo" -type f -exec "${md5Cmd[@]}" {} \;

如果要减少命令长度,最好创建一个函数或脚本,并将其作为-exec的一部分运行。比如find$HOME/foo-type f-exec./md5.sh{}\@JonathaDaguerre函数不能与-exec一起使用,因为它是由find执行的,并且函数只能在shell中使用。但是一个助手脚本就可以了。很好的观点@GordonDavisson!要从-exec运行函数,需要对shell进行新的调用。谢谢你纠正我。如果你想减少命令长度,最好创建一个函数或脚本,并作为-exec的一部分运行它。比如find$HOME/foo-type f-exec./md5.sh{}\@JonathaDaguerre函数不能与-exec一起使用,因为它是由find执行的,并且函数只能在shell中使用。但是一个助手脚本就可以了。很好的观点@GordonDavisson!要从-exec运行函数,需要对shell进行新的调用。谢谢你纠正我。