On Mon, Aug 25, 2014 at 8:04 PM, Greg Wooledge <wool...@eeg.ccf.org> wrote: > On Sun, Aug 24, 2014 at 01:36:38PM +0200, Tim Friske wrote: >> I currently emulate the behavior I seek for with the following function: >> >> function _import { >> local -r file="$1" >> set -- "${@:2}" >> source "$file" "$@" >> } > > How is this different from source, exactly? You're passing all of the > same arguments. Your function is identical to: > > _import() { > source "$@" > } >
His function deals with the edge case where there is no argument passed to the source'd file. He wants `source` to behave the same inside and outside of a function. For anyone who wants to test this quickly, try the following code: #!/bin/bash i() { printf '%s:' "$FUNCNAME" local -r f=$1 shift . "$f" "$@" } s() { printf '%s:' "$FUNCNAME" . "$@" } printf '%s:' "." . ./s.sh i ./s.sh s ./s.sh where ./s.sh contains: printf '%s:%s\n' $# "$*" The output: % ./test.sh .:0: i:0: s:1:./s.sh