[For reference, I'm talking about Ash in Alpine Linux here, which is part of BusyBox.]
I thought I knew the big differences, but it turns out I've had false assumptions for years. Ash does support [[ double square brackets ]] and (as best I can tell) all of Bash's logical trickery inside them. It also supports ${VARIABLE_SUBSTRINGS:5:12}` which was another surprise.
At this stage, the only things I've found that Bash can do that Ash can't are:
- Arrays, which Bash doesn't seem to do well anyway
- Brace expansion, which is awesome but I can live without it.
What else is there? Did Ash used to be more limited? The double square bracket thing really surprised me.
10 Comments
suprjami@lemmy.sdf.org · 12 pts · 2y
What have you found bad about bash arrays? I have some simple usage of those (in bash) and they work fine.
danielquinn@lemmy.ca · 7 pts · 2y
As far as I've seen, they don't provide any advantage over a string with spaces, which doesn't work well either when you've got values with spaces:
shmanio@lemmy.world · 21 pts · 2y
You should put some quotes where you use the array:
danielquinn@lemmy.ca · 4 pts · 2y
Aaaaah! Thank you kind stranger. It never would have occurred to me to quote an array!
suprjami@lemmy.sdf.org · 11 pts · 2y
If you run your scripts through https://shellcheck.net it'll pick up things like this. Also available as a Linux package for offline use.
zatanas@lemm.ee · 3 pts · 2y
I too would like to know. Thank you.
palordrolap@kbin.social · 9 pts · 2y
ash(and its successordashfound on other distros) is a POSIX-y shell rather than ashclone, so it has all(? most?) of the POSIX feature set, whose syntax may indeed have been 'borrowed' from shells that came later thansh.Not sure if there's a "parent" from which both
ashandbashinherit the syntax or whetherbashis the true source, but that doesn't really matter here.All that said, it's worth checking to see if your system has a command on the PATH called
[[. That has been one way that[[support can be added to a system when the shell itself might not support it. Note that command names don't have to be alphanumeric like functions tend to be in a programming language (or other languages if you consider that the shell can be used for programming too), so[[is perfectly valid!danielquinn@lemmy.ca · 3 pts · 2y
Yup, that looks like exactly what was done in Alpine:
So while the Ash itself doesn't support the
[[extension, this work-around produces the same effect. Nifty.jntesteves@lemmy.world · 5 pts · 2y
Although that link exists, that's not what is being used by default.
[[is a shell builtin in ash/busybox, so that takes precedence.On Alpine:
danielquinn@lemmy.ca · 1 pts · 2y
Huh. So the link is unnecessary and Ash supports [[ out of the box? Good to know, thanks!