wil*_*unt 6 shell bash quoting
我的目录的名称包含一个$
和'
,例如
:~$ export DIR=\$my\'dir
:~$ sh -c "ls $DIR"
Run Code Online (Sandbox Code Playgroud)
如何在不$my
展开的情况下运行上面的命令?我知道单引号不起作用,因为$DIR
包含一个。
实际上,问题来自使用find
命令如下:
:~$ find ./\$my\'dir -type d -exec sh -c 'ls "{}"' \;
Run Code Online (Sandbox Code Playgroud)
它说./\'dir: No such file or directory
,如果我删除双引号,那么它说unexpected EOF while looking for matching '
。
哇,这里有一些复杂的解决方案!我认为你需要做的就是这样:
find ./\$my\'dir -type d -exec sh -c 'ls "$1"' sh {} \;
Run Code Online (Sandbox Code Playgroud)
无需将参数放入sh
命令字符串中,只需将它们用作 的参数即可sh
。请注意,第二个sh
是 的值$0
,之后的所有内容都是位置参数。
至于查找不包含 pdf 的目录的完整问题,通常最好使用find
这种方法而不是ls
. 这应该接近您正在寻找的内容:
find . -type d \
-exec sh -c '[ "$(find "$1" -maxdepth 1 -type f -iname "*.pdf")" = "" ]' sh {} \; \
-print
Run Code Online (Sandbox Code Playgroud)