Как использовать переменную ПУТИ в качестве отправной точки в находке в zsh

Я пытаюсь использовать $PATH в качестве входа для нахождения для нахождения файлов определенными моим путем. Это - моя попытка:

find ${PATH//:/ } -iname "*chrome*"

Здесь я заменяю все : в PATH с пространством, таким образом, список отправных точек похож, когда Вы вводите вручную. Проблема, это - ответ:

find: ‘/home/martin/bin /home/martin/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin’: No such file or directory

Переменная интерпретируется в целом строка вместо нескольких разделенных пробелом путей.

Эта конкретная проблема может быть решена с помощью xargs как это:

echo $PATH | xargs -d: -Ix find x -iname "*chrome*"

Мне все еще любопытно, как предпринять первую попытку работать. Я держал пари, что каждый лучше мудрый производительностью также. Я использую zsh в своей системе.Спасибо

4
задан 24 January 2017 в 15:29

1 ответ

Похоже на использование оболочки как zsh который отключает разделение слова на переменном расширении . Если Вы действительно используете zsh, то необходимо вызвать расширение или эмуляцией sh (emulate sh) или использованием ${=PATH//:/ }:

$ printf "%s\n" ${PATH//:/ }
/usr/local/sbin /usr/local/bin /usr/bin
$ printf "%s\n" ${=PATH//:/ }
/usr/local/sbin
/usr/local/bin
/usr/bin
$ (emulate sh; printf "%s\n" ${PATH//:/ })
/usr/local/sbin
/usr/local/bin
/usr/bin

, Если Вы действительно используете удар, проверьте свою IFS:

$ (IFS=; printf "%s\n" ${PATH//:/ })
/usr/local/sbin /usr/local/bin /usr/bin
$ (IFS=; unset IFS; printf "%s\n" ${PATH//:/ })
/usr/local/sbin
/usr/local/bin
/usr/bin

Установка IFS к пустой строке отключает разделение слова в ударе. Вы можете сбрасывать IFS, чтобы получить значение по умолчанию и повторно включить разделение слова.

4
ответ дан 1 December 2019 в 09:45

Другие вопросы по тегам:

Похожие вопросы: