如何引用包含美元符号 $ 和单引号 ' 的字符串?

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 '

Gra*_*eme 4

哇,这里有一些复杂的解决方案!我认为你需要做的就是这样:

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)