Bash:无法识别合法文件夹路径

Bash:无法识别合法文件夹路径

我尝试使用sed将路径转换PATH为以下内容的输入find

User.Name@Machine-Name ~
$ echo $PATH | sed -e 's/:/\n/g' \
  | sed -n -e 's=.*="&"=' -e '2,5p'

   "/bin"
   "/usr/local/bin"
   "/usr/bin"
   "/c/Program Files/Eclipse Adoptium/jdk-8.0.392.8-hotspot/bin"

路径被引用以保护空格。不幸的是,当它们提交到find

User.Name@Machine-Name ~
$ find \
   $(echo $PATH | sed -e 's/:/\n/g' | sed -n -e 's=.*="&"=' -e '2,5p') \
   -iname '*libc*'

   find: ‘"/bin"’: No such file or directory
   find: ‘"/usr/local/bin"’: No such file or directory
   find: ‘"/usr/bin"’: No such file or directory
   find: ‘"/c/Program’: No such file or directory
   find: ‘Files/Eclipse’: No such file or directory
   find: ‘Adoptium/jdk-8.0.392.8-hotspot/bin"’: No such file or directory

事实上,空格不受保护并被解释为参数分隔符。

另一方面,如果我只是输入带引号的路径,它就可以正常工作:

User.Name@Machine-Name ~
$ find "/bin" -iname '*libc*' # Finds nothing, but no syntax error
User.Name@Machine-Name ~

我如何理解这一点以及如何有效地将PATH路径转换为参数(例如 for find)?

答案1

如果您不需要在 中保留空元素PATH,那么您可以尝试

IFS=: read -ra patharray <<<"$PATH"

然后(注意 bash 数组的索引为零)

find "${patharray[@]:1:4}" -iname '*libc*'

相关内容