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*'

おすすめ記事