|
From: | Dennis Williamson |
Subject: | Re: Problem with brace expansion |
Date: | Tue, 21 Apr 2015 18:16:07 -0500 |
There appears to be a bug in bash when using a variable in curly brace expansion, e.g., {1..$n}. I have put the two following test scripts in the attached files looper1.sh and looper2.sh:
#looper1.sh
for i in {1..4}
do
echo i = $i
done
#looper2.sh
n=4
for i in {1..$n}
do
echo i = $i
done
Tests were done with bash, ksh, zsh, pdksh, dash and heirloom System V Bourne sh with the following versions:
bash 3.2.57(1)
bash 4.3.33(1)
ksh version sh (AT&T Research) 93u+ 2012-08-01
zsh 5.0.5 (x86_64-apple-darwin14.0)
pdksh stable 5.2.14
dash stable 0.5.8
sh ???
Results for bash (both versions give the same result); note that bash fails to expand the curly brace _expression_ in only the second case:
$ bash looper1.sh
i = 1
i = 2
i = 3
i = 4
$ bash looper2.sh
i = {1..4}
Repeating using ksh we get correct expansion of the curly braces:
$ ksh looper1.sh
i = 1
i = 2
i = 3
i = 4
$ ksh looper2.sh
i = 1
i = 2
i = 3
i = 4
And using zsh, the same result as for ksh:
$ zsh looper1.sh
i = 1
i = 2
i = 3
i = 4
$ zsh looper2.sh
i = 1
i = 2
i = 3
i = 4
Neither pdksh (which installs as ksh using homebrew) nor dash handle either case correctly:
pdksh:
$ /usr/local/bin/ksh looper1.sh
i = {1..4}
$ /usr/local/bin/ksh looper2.sh
i = {1..4}
dash:
$ dash looper1.sh
i = {1..4}
$ dash looper2.sh
i = {1..4}
The System V sh from the heirloom project behaves the same way as pdksh and dash (or more correctly, since System V is really the reference, pdksh and dash behave the same way as SysV sh):
$ 5 sh looper1.sh
i = {1..4}
$ 5 sh looper2.sh
i = {1..4}
[Prev in Thread] | Current Thread | [Next in Thread] |