выбор между $0 и bash SOURCE
Как выбрать между "" и "${BASH_SOURCE[0]}"
Это описание от GNU мне это не очень помогло.
BASH_SOURCE
An array variable whose members are the source filenames where the
corresponding shell function names in the FUNCNAME array variable are
defined. The shell function ${FUNCNAME[$i]} is defined in the file
${BASH_SOURCE[$i]} and called from ${BASH_SOURCE[$i+1]}
1 ответ:
${BASH_SOURCE[0]}(или, проще говоря,$BASH_SOURCE[1] ) содержит (потенциально относительный) путь содержащего скрипта в все сценарии вызова, особенно когда сценарий источников, что не относится к.кроме того, как Чарльз Даффи указывает
можно использовать произвольные значение вызывающего абонента.
С другой стороны,$BASH_SOURCEможете будет пусто, если именованный файл не задействован; например:echo 'echo "[$BASH_SOURCE]"' | bashследующий пример иллюстрирует это:
скрипт
foo:#!/usr/bin/env bash echo "[] vs. [${BASH_SOURCE[0]}]"
$ bash ./foo [./foo] vs. [./foo] $ . ./foo [bash] vs. [./foo]
является частью спецификации оболочки POSIX, тогда какBASH_SOURCE, как следует из названия, является специфичным для Bash.
[1] опционное значение:
${BASH_SOURCE[0]}и$BASH_SOURCE:Bash позволяет ссылаться на элемент
0из массив переменная с помощью скаляр Примечание: вместо того, чтобы писать${arr[0]}можно писать$arr; другими словами: если вы ссылаетесь на переменную как будто это скаляр, вы получаете элемент по индексу0.использование этой функции скрывает тот факт, что
$arr- это массив, который является, почему популярны оболочки-код Линтер shellcheck.net выдает следующее предупреждение (на момент написания этой статьи):SC2128: расширение массива без индекса дает только первый элемент.
на стороне Примечание: хотя это предупреждение полезно, оно может быть более точным, потому что вы не обязательно получите первый элемент: это конкретно элемент в индексе
0это возвращается, так что если первый элемент имеет более высокий индекс-что возможно в Bash - вы получите пустую строку; попробуйте'a[1]='hi'; echo "$a"'.
(Напротив,zsh, либо ренегат, действительно тут возвращает первый элемент, независимо от его индекса).вы можете отказаться от этой функции из-за ее неясности, но она работает предсказуемо и, прагматически говоря, вам редко, если вообще когда-либо, понадобится доступ к индексам другое чем
0массива переменной${BASH_SOURCE[@]}.
Comments