A resposta de Gnouc explica minha primeira pergunta: "Por que faz diferença quando eu chamo o comando de fonte do Bash da função _import ao invés de diretamente?"
Com relação à minha segunda pergunta: "Como posso normalizar o comportamento do comando de origem do Bash?"
Acho que encontrei a seguinte resposta:
Alterando a função _import
para:
function _import {
local -r file="$1"
shift
source "$file" "$@"
}
Eu recebo a seguinte saída ao executar o script foo
Bash, por exemplo, ./foo
:
source bar::0::
source bar foo::1:foo:
_import bar::0::
_import bar foo::1:foo:
Justificativa por trás da minha pergunta e esta resposta: Um script Bash "importado" deve ser capaz de avaliar seu próprio conjunto de argumentos através dos parâmetros posicionais e especiais do Bash mesmo quando nenhum foi dado durante a importação. Quaisquer argumentos que PODEM ser passados para o script de Bash de importação NÃO DEVEM ser implicitamente passados para o script de Bash importado.