Я довольно много смотрю на Google, stackexchange, stackoverflow и т. Д. До сих пор ни один из примеров не удовлетворял довольно простому варианту использования символа звездочки (а не подстановки) в сценарии bash.Как передать звездочку (*) команде внутри сценария Bash?
Следующие примеры команд работают точно так же, как необходимо в (интерактивном) окне терминала. Обе команды дают одинаковые результаты.
find /home/will/ref/ -path "*Java Develop*.pdf"
#
target="Java Develop"
find /home/will/ref/ -path "*$target*.pdf"
вопрос, и цель, как успешно поместить эту команду в сценарий с find
цели
- "Java Разработка"
передается в качестве аргумента? Для сценария, названного, get-ref
следующим образом. не
get-ref "Java Develop"`
Ни один из следующих методов (не исчерпывающий) перечень попыток:
find /home/will/ref/ -path \"\*$target\*.pdf\"
find /home/will/ref/ -path \"*$target*.pdf\"
find /home/will/ref/ -path "*$target*.pdf"
Плюс несколько вариаций вокруг этих примеров, включая сдачи -path
argume nt string в переменной - все до сих пор удается сплит цель, используя пробел, или принять аргумент и ничего не возвращать. При использовании в командной строке возвращается около 3 x файлов.
Чтобы быть ясным, я не занимаюсь пространством внутри $target
, потому что эта сторона работает нормально. В конечном итоге $target
будет параметром сценария в любом случае.
- обновление 2015-12-22 -
Похоже, что версия Bash имеет важное значение. Эта версия:
$ bash -version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
Друг побежал более или менее теми же вариантами, что и выше, и они работают. Когда я запускал свой скрипт на своем ПК, тот же результат, без вывода.
Чтобы ответить на следующие вопросы:
- Все выходит из строя либо не «найти» что-то; или давая ошибку о строке «Devel» из-за неверных балансовых котировок, которые мы предполагаем.
- Я использовал
set -x
, и результаты нашли ответ, который работает над этим bash (см. Опубликованный ответ).
Я просто отправлю свою версию в качестве ответа; возможно, у кого-то будет лучший способ или, по крайней мере, объяснение, позволяющее Bash с крючка.
Опасность состоит в том, что звездочки (*) как-то не видны или обработаны, как ожидалось, когда одна и та же команда используется внутри сценария Bash.
Как № 3 не подходит для вас? С информацией, которую вы предоставили, я считаю, что она должна работать. – tripleee
Я бы ожидал, что 3 тоже будет работать. Что относительно '-path '* $ {target} *. Pdf" '? – Stphane
Просьба представить фактическую реализацию 'get-ref'. (Скорее всего, вы используете '$ 1' вместо' '$ 1' '.) – rici