Недавно я хотел узнать, как лучше всего найти путь к текущему скрипту / файлу в Bash.
Я нашел много ответов. В частности, один из них был:
"${BASH_SOURCE:-${(%):-%x}}"
Я помню, как в то время решал, что это лучшее решение для моих нужд. Теперь я пытаюсь вспомнить почему. Я знаю, что значат некоторые из произведений, но не все. И даже с тем, что я знаю, я не могу собрать все вместе, чтобы понять это. Оно работает. Но почему?
Все усилия, которые я предпринял, чтобы найти этот конкретный c код в Интернете (включая поиск его фрагментов), потерпели неудачу, поэтому я не могу найти, где я нашел его изначально.
Может кто-нибудь сказать мне, что означает каждая часть (и, возможно, даже предложить, почему я выбрал это вместо других ответов)?
Спасибо!
ОБНОВЛЕНИЕ на следующий день : отличный ответ (и комментарии) от @rici, который объясняет все, включая то, почему я выбрал его.
Кажется, я выбрал все это выражение, чтобы обеспечить возможность надежного использования исходных файлов, в которых я его использую, в обоих случаях. bash и zsh - что было и есть цель. При двойных подстановках все выражение получает одинаковый ответ в любой оболочке.
Объясняет, почему я не смог понять (или найти что-нибудь разумное через google для) $ {(%): -% x} часть в bash, потому что ... ну ... это не имеет большого смысла в bash, смеется, потому что это для zsh. По этой причине я сейчас добавляю к этому тег zsh.
Второе ОБНОВЛЕНИЕ через час, на случай, если это кому-нибудь поможет: теперь я нашел следующее:
$ {BASH_SOURCE [0]} эквивалент в zsh?
... вот откуда я получил ${(%):-%x}
от оригинала, в частности, этот конкретный c ответ:
{ ссылка }