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경로를 매개변수로 효율적으로 변환할 수 있습니까(예: find)?

답변1

빈 요소를 유지할 필요가 없다면 PATH시도해 볼 수 있습니다.

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

그런 다음 (bash 배열의 인덱스는 0입니다)

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

관련 정보