Replaced all 'typeset' and 'typeset -i' calls by 'local', as adviced on:

    https://wiki.ubuntu.com/DashAsBinSh

Went back from making use of the specific Bourne shell construct 'typeset
-i' for easy integer calculations (typeset -i foo=123; foo=foo+456;) to a
more compatible way (local foo=123; foo=$((foo+456)); )

The 'typeset -f' call has been replaced by a call to 'type', effectively
not testing for existence of a declared *function*, but testing for
existence of a declared *something*. You have to sacrifice sometimes in
order to be more portable.
diff --git a/git-flow b/git-flow
index 573aa25..a7e4a26 100755
--- a/git-flow
+++ b/git-flow
@@ -77,7 +77,7 @@
 	if [ "$1" != "" ] && ! echo "$1" | grep -q "^-"; then
 		SUBACTION="$1"; shift
 	fi
-	if ! typeset -f "cmd_$SUBACTION" 2>&1 >/dev/null; then
+	if ! type "cmd_$SUBACTION" > /dev/null 2>&1; then
 		warn "Unknown subcommand: '$SUBACTION'"
 		usage
 		exit 1
diff --git a/git-flow-feature b/git-flow-feature
index db45d81..d65da94 100644
--- a/git-flow-feature
+++ b/git-flow-feature
@@ -32,9 +32,9 @@
 	DEFINE_boolean verbose false 'verbose (more) output' v
 	parse_args "$@"
 
-	typeset feature_branches
-	typeset current_branch
-	typeset short_names
+	local feature_branches
+	local current_branch
+	local short_names
 	feature_branches=$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")
 	if [ -z "$feature_branches" ]; then
 		warn "No feature branches exist."
@@ -44,20 +44,20 @@
 	short_names=$(echo "$feature_branches" | sed "s ^$PREFIX  g")
 
 	# determine column width first
-	typeset -i width=0
-	typeset branch
+	local width=0
+	local branch
 	for branch in $short_names; do
-		typeset -i len=${#branch}
+		local len=${#branch}
 		width=$(max $width $len)
 	done
-	width=width+3
+	width=$(($width+3))
 
-	typeset branch
+	local branch
 	for branch in $short_names; do
-		typeset fullname=$PREFIX$branch
-		typeset base=$(git merge-base "$fullname" "$DEVELOP_BRANCH")
-		typeset develop_sha=$(git rev-parse "$DEVELOP_BRANCH")
-		typeset branch_sha=$(git rev-parse "$fullname")
+		local fullname=$PREFIX$branch
+		local base=$(git merge-base "$fullname" "$DEVELOP_BRANCH")
+		local develop_sha=$(git rev-parse "$DEVELOP_BRANCH")
+		local branch_sha=$(git rev-parse "$fullname")
 		if [ "$fullname" = "$current_branch" ]; then
 			printf "* "
 		else
@@ -97,8 +97,8 @@
 expand_nameprefix_arg() {
 	require_name_arg
 
-	typeset expanded_name
-	typeset -i exitcode
+	local expanded_name
+	local exitcode
 	expanded_name=$(resolve_nameprefix "$NAME" "$PREFIX")
 	exitcode=$?
 	case $exitcode in
@@ -114,7 +114,7 @@
 		expand_nameprefix_arg
 		gitflow_require_branch "$PREFIX$NAME"
 	else
-		typeset current_branch=$(gitflow_current_branch)
+		local current_branch=$(gitflow_current_branch)
 		if startswith "$current_branch" "$PREFIX"; then
 			BRANCH=$current_branch
 			NAME=${BRANCH#$PREFIX}
@@ -368,7 +368,7 @@
 	gitflow_require_branch "$BRANCH"
 
 	git checkout -q "$BRANCH"
-	typeset OPTS=
+	local OPTS=
 	if flag interactive; then
 		OPTS="$OPTS -i"
 	fi
diff --git a/git-flow-hotfix b/git-flow-hotfix
index cee8d2f..9e71374 100644
--- a/git-flow-hotfix
+++ b/git-flow-hotfix
@@ -29,9 +29,9 @@
 	DEFINE_boolean verbose false 'verbose (more) output' v
 	parse_args "$@"
 
-	typeset hotfix_branches
-	typeset current_branch
-	typeset short_names
+	local hotfix_branches
+	local current_branch
+	local short_names
 	hotfix_branches=$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")
 	if [ -z "$hotfix_branches" ]; then
 		warn "No hotfix branches exist."
@@ -41,20 +41,20 @@
 	short_names=$(echo "$hotfix_branches" | sed "s ^$PREFIX  g")
 
 	# determine column width first
-	typeset -i width=0
-	typeset branch
+	local width=0
+	local branch
 	for branch in $short_names; do
-		typeset -i len=${#branch}
+		local len=${#branch}
 		width=$(max $width $len)
 	done
-	width=width+3
+	width=$(($width+3))
 
-	typeset branch
+	local branch
 	for branch in $short_names; do
-		typeset fullname=$PREFIX$branch
-		typeset base=$(git merge-base "$fullname" "$MASTER_BRANCH")
-		typeset master_sha=$(git rev-parse "$MASTER_BRANCH")
-		typeset branch_sha=$(git rev-parse "$fullname")
+		local fullname=$PREFIX$branch
+		local base=$(git merge-base "$fullname" "$MASTER_BRANCH")
+		local master_sha=$(git rev-parse "$MASTER_BRANCH")
+		local branch_sha=$(git rev-parse "$fullname")
 		if [ "$fullname" = "$current_branch" ]; then
 			printf "* "
 		else
@@ -65,8 +65,8 @@
 			if [ "$branch_sha" = "$master_sha" ]; then
 				printf "(no commits yet)"
 			else
-				typeset tagname=$(git name-rev --tags --no-undefined --name-only "$base")
-				typeset nicename
+				local tagname=$(git name-rev --tags --no-undefined --name-only "$base")
+				local nicename
 				if [ "$tagname" != "" ]; then
 					nicename=$tagname
 				else
@@ -184,9 +184,9 @@
 	# try to tag the release
 	# in case a previous attempt to finish this release branch has failed,
 	# but the tag was set successful, we skip it now
-	typeset tagname=$VERSION_PREFIX$VERSION
+	local tagname=$VERSION_PREFIX$VERSION
 	if ! gitflow_tag_exists "$tagname"; then
-		typeset opts="-a"
+		local opts="-a"
 		flag sign && opts="$opts -s"
 		[ "$FLAGS_signingkey" != "" ] && opts="$opts -u '$FLAGS_signingkey'"
 		[ "$FLAGS_message" != "" ] && opts="$opts -m '$FLAGS_message'"
diff --git a/git-flow-release b/git-flow-release
index 556af28..329a5e1 100644
--- a/git-flow-release
+++ b/git-flow-release
@@ -40,9 +40,9 @@
 	DEFINE_boolean verbose false 'verbose (more) output' v
 	parse_args "$@"
 
-	typeset release_branches
-	typeset current_branch
-	typeset short_names
+	local release_branches
+	local current_branch
+	local short_names
 	release_branches=$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")
 	if [ -z "$release_branches" ]; then
 		warn "No release branches exist."
@@ -53,20 +53,20 @@
 	short_names=$(echo "$release_branches" | sed "s ^$PREFIX  g")
 
 	# determine column width first
-	typeset -i width=0
-	typeset branch
+	local width=0
+	local branch
 	for branch in $short_names; do
-		typeset -i len=${#branch}
+		local len=${#branch}
 		width=$(max $width $len)
 	done
-	width=width+3
+	width=$(($width+3))
 
-	typeset branch
+	local branch
 	for branch in $short_names; do
-		typeset fullname=$PREFIX$branch
-		typeset base=$(git merge-base "$fullname" "$DEVELOP_BRANCH")
-		typeset develop_sha=$(git rev-parse "$DEVELOP_BRANCH")
-		typeset branch_sha=$(git rev-parse "$fullname")
+		local fullname=$PREFIX$branch
+		local base=$(git merge-base "$fullname" "$DEVELOP_BRANCH")
+		local develop_sha=$(git rev-parse "$DEVELOP_BRANCH")
+		local branch_sha=$(git rev-parse "$fullname")
 		if [ "$fullname" = "$current_branch" ]; then
 			printf "* "
 		else
@@ -77,7 +77,7 @@
 			if [ "$branch_sha" = "$develop_sha" ]; then
 				printf "(no commits yet)"
 			else
-				typeset nicename=$(git rev-parse --short "$base")
+				local nicename=$(git rev-parse --short "$base")
 				printf "(based on $nicename)"
 			fi
 		else
@@ -190,9 +190,9 @@
 	# try to tag the release
 	# in case a previous attempt to finish this release branch has failed,
 	# but the tag was set successful, we skip it now
-	typeset tagname=$VERSION_PREFIX$VERSION
+	local tagname=$VERSION_PREFIX$VERSION
 	if ! gitflow_tag_exists "$tagname"; then
-		typeset opts="-a"
+		local opts="-a"
 		flag sign && opts="$opts -s"
 		[ "$FLAGS_signingkey" != "" ] && opts="$opts -u '$FLAGS_signingkey'"
 		[ "$FLAGS_message" != "" ] && opts="$opts -m '$FLAGS_message'"
diff --git a/git-flow-support b/git-flow-support
index 06bea16..804a01d 100644
--- a/git-flow-support
+++ b/git-flow-support
@@ -31,9 +31,9 @@
 	DEFINE_boolean verbose false 'verbose (more) output' v
 	parse_args "$@"
 
-	typeset support_branches
-	typeset current_branch
-	typeset short_names
+	local support_branches
+	local current_branch
+	local short_names
 	support_branches=$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")
 	if [ -z "$support_branches" ]; then
 		warn "No support branches exist."
@@ -43,20 +43,20 @@
 	short_names=$(echo "$support_branches" | sed "s ^$PREFIX  g")
 
 	# determine column width first
-	typeset -i width=0
-	typeset branch
+	local width=0
+	local branch
 	for branch in $short_names; do
-		typeset -i len=${#branch}
+		local len=${#branch}
 		width=$(max $width $len)
 	done
-	width=width+3
+	width=$(($width+3))
 
-	typeset branch
+	local branch
 	for branch in $short_names; do
-		typeset fullname=$PREFIX$branch
-		typeset base=$(git merge-base "$fullname" "$MASTER_BRANCH")
-		typeset master_sha=$(git rev-parse "$MASTER_BRANCH")
-		typeset branch_sha=$(git rev-parse "$fullname")
+		local fullname=$PREFIX$branch
+		local base=$(git merge-base "$fullname" "$MASTER_BRANCH")
+		local master_sha=$(git rev-parse "$MASTER_BRANCH")
+		local branch_sha=$(git rev-parse "$fullname")
 		if [ "$fullname" = "$current_branch" ]; then
 			printf "* "
 		else
@@ -67,8 +67,8 @@
 			if [ "$branch_sha" = "$master_sha" ]; then
 				printf "(no commits yet)"
 			else
-				typeset tagname=$(git name-rev --tags --no-undefined --name-only "$base")
-				typeset nicename
+				local tagname=$(git name-rev --tags --no-undefined --name-only "$base")
+				local nicename
 				if [ "$tagname" != "" ]; then
 					nicename=$tagname
 				else
diff --git a/gitflow-common b/gitflow-common
index b1c42ac..8efc365 100644
--- a/gitflow-common
+++ b/gitflow-common
@@ -18,7 +18,7 @@
 
 # set logic
 has() {
-	typeset item=$1; shift
+	local item=$1; shift
 	echo " $@ " | grep -q " $item "
 }
 
@@ -31,8 +31,8 @@
 endswith() { [ "$1" != "${1#$2}" ]; }
 
 # convenience functions for checking shFlags flags
-flag() { typeset FLAG; eval FLAG='$FLAGS_'$1; [ $FLAG -eq $FLAGS_TRUE ]; }
-noflag() { typeset FLAG; eval FLAG='$FLAGS_'$1; [ $FLAG -ne $FLAGS_TRUE ]; }
+flag() { local FLAG; eval FLAG='$FLAGS_'$1; [ $FLAG -eq $FLAGS_TRUE ]; }
+noflag() { local FLAG; eval FLAG='$FLAGS_'$1; [ $FLAG -ne $FLAGS_TRUE ]; }
 
 #
 # Git specific common functionality
@@ -61,10 +61,10 @@
 # 2: Multiple matches found. These matches are written to stderr
 #
 resolve_nameprefix() {
-	typeset name=$1
-	typeset prefix=$2
-	typeset matches
-	typeset -i num_matches
+	local name=$1
+	local prefix=$2
+	local matches
+	local num_matches
 
 	# first, check if there is a perfect match
 	if has "$LOCAL_BRANCHES" "$prefix$name"; then
@@ -109,7 +109,7 @@
 
 gitflow_require_clean_working_tree() {
 	gitflow_test_clean_working_tree
-	typeset -i result=$?
+	local result=$?
 	if [ $result -eq 1 ]; then
 		die "fatal: Working tree contains unstaged changes. Aborting."
 	fi
@@ -164,10 +164,10 @@
 # 3    Branch needs a real merge
 #
 gitflow_test_branches_equal() {
-	typeset commit1=$(git rev-parse "$1")
-	typeset commit2=$(git rev-parse "$2")
+	local commit1=$(git rev-parse "$1")
+	local commit2=$(git rev-parse "$2")
 	if [ "$commit1" != "$commit2" ]; then
-		typeset base=$(git merge-base "$commit1" "$commit2")
+		local base=$(git merge-base "$commit1" "$commit2")
 		if [ "$commit1" = "$base" ]; then
 			return 1
 		elif [ "$commit2" = "$base" ]; then
@@ -184,7 +184,7 @@
 	gitflow_require_local_branch "$1"
 	gitflow_require_remote_branch "$2"
 	gitflow_test_branches_equal "$1" "$2"
-	typeset -i status=$?
+	local status=$?
 	if [ $status -gt 0 ]; then
 		warn "Branches '$1' and '$2' have diverged."
 		if [ $status -eq 1 ]; then
@@ -204,8 +204,8 @@
 # Checks whether branch $1 is succesfully merged into $2
 #
 gitflow_is_branch_merged_into() {
-	typeset subject=$1
-	typeset base=$2
-	typeset all_merges=$(git branch --contains $subject | sed 's/^[* ] //')
+	local subject=$1
+	local base=$2
+	local all_merges=$(git branch --contains $subject | sed 's/^[* ] //')
 	has $base $all_merges
 }