Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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返回的文件路径中的单引号_Bash_Escaping_Find - Fatal编程技术网

Bash 处理find返回的文件路径中的单引号

Bash 处理find返回的文件路径中的单引号,bash,escaping,find,Bash,Escaping,Find,我正在编写一个bash脚本,当从目录B运行时,它将镜像目录a在目录B中的目录结构 目前,我的工作如下: #!/bin/bash dirify () { echo $1 } export -f dirify find "../test" -type d -exec bash -c "dirify '{}'" \; 我从目录B运行这个脚本,而./test是目录A。 幸运的是,我用来测试的目录包含名称中带有“的文件夹。当我运行此脚本时,bash在到达这些目录

我正在编写一个bash脚本,当从目录
B
运行时,它将镜像目录
a
在目录
B
中的目录结构

目前,我的工作如下:

 #!/bin/bash          

 dirify () {
    echo $1
 }
 export -f dirify

 find "../test" -type d -exec bash -c "dirify '{}'" \;
我从目录
B
运行这个脚本,而
./test
是目录
A
。 幸运的是,我用来测试的目录包含名称中带有
的文件夹。当我运行此脚本时,bash在到达这些目录时会出现以下错误:

> bash: -c: line 0: unexpected EOF while looking for matching `''
> bash: -c: line 1: syntax error: unexpected end of file
(请注意,第0行和第1行是指
dirify()函数中的行)

以下是说明这一问题的更为简化的方式:

 #!/bin/bash          

 dirify () {
    echo $1
 }
 export -f dirify

 find "../test" -type d -exec bash -c "dirify '{}'" \;
find../test“-execbash-c“echo'{}'”

此示例产生相同的错误

无论如何,这是一个问题,因为在生产环境中,我不能假设文件路径不包含
字符


这个问题还有其他解决方法吗?

将其作为参数传递

bash -c 'dirify "$1"' dirify {}

伟大的谢谢您能简要解释一下这种语法是如何工作的吗?当通过
-c
运行脚本时,bash会获取额外的参数,并从
$0
开始赋值。