Skip to content

Instantly share code, notes, and snippets.

@electrum
Last active November 3, 2016 18:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save electrum/0d918d37dcb4b41fd2d78ec50989221c to your computer and use it in GitHub Desktop.
Save electrum/0d918d37dcb4b41fd2d78ec50989221c to your computer and use it in GitHub Desktop.
Bash variable expansion
#!/usr/bin/env python
import sys
print '%s: %s' % (len(sys.argv) - 1, sys.argv[1:])
#!/bin/bash -eu
function go() {
echo "argc: $#"
./args.py $@
./args.py "$@"
./args.py $*
./args.py "$*"
echo
}
echo "direct:"
./args.py $@
./args.py "$@"
./args.py $*
./args.py "$*"
echo
shift
echo 'call $@'
go qqq $@
echo 'call "$@"'
go qqq "$@"
echo 'call $*'
go qqq $*
echo 'call "$*"'
go qqq "$*"
$ ./test.sh
direct:
4: ['abc', 'xyz', 'foo', 'bar']
3: ['abc', 'xyz', 'foo bar']
4: ['abc', 'xyz', 'foo', 'bar']
1: ['abc xyz foo bar']
call $@
argc: 4
4: ['qqq', 'xyz', 'foo', 'bar']
4: ['qqq', 'xyz', 'foo', 'bar']
4: ['qqq', 'xyz', 'foo', 'bar']
1: ['qqq xyz foo bar']
call "$@"
argc: 3
4: ['qqq', 'xyz', 'foo', 'bar']
3: ['qqq', 'xyz', 'foo bar']
4: ['qqq', 'xyz', 'foo', 'bar']
1: ['qqq xyz foo bar']
call $*
argc: 4
4: ['qqq', 'xyz', 'foo', 'bar']
4: ['qqq', 'xyz', 'foo', 'bar']
4: ['qqq', 'xyz', 'foo', 'bar']
1: ['qqq xyz foo bar']
call "$*"
argc: 2
4: ['qqq', 'xyz', 'foo', 'bar']
2: ['qqq', 'xyz foo bar']
4: ['qqq', 'xyz', 'foo', 'bar']
1: ['qqq xyz foo bar']
#!/bin/sh -eu
./args.sh abc xyz 'foo bar'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment