PONY λ M2 Modula-2
for Bash programmers

You already know Bash.Now explore other languages.

Side-by-side, interactive cheatsheets for Bash programmers
comparing Bash to other languages. Every example runs live in your browser — no setup, no installation.

▶ Start with Zsh Browse comparisons ↓

Choose your own path by reordering languages

Zsh Pre-Alpha ⚡ Works Offline ⚡ Offline

The shell macOS made the default, Zsh runs almost all of your Bash scripts unchanged — the short list of things that genuinely differ is worth an afternoon, and the parameter flags you get in exchange retire a pile of tr/sort/uniq pipelines.

  • Word splitting is off — an unquoted $variable stays one word, which retires the entire class of bugs caused by forgetting to quote
  • Arrays are 1-indexed and a bare $array means every element, not just ${array[0]}
  • Parameter flags — ${(j:,:)list}, ${(s:,:)text}, ${(u)list}, ${(on)numbers} — join, split, deduplicate and sort with no external tool and no subprocess
  • Glob qualifiers — *(.om[1]) is the newest regular file — replace most everyday find invocations
  • always blocks give the shell a real try/finally, scoped to a block instead of a single global EXIT trap
  • emulate -L sh restores Bash rules for one function, so a ported script can migrate a piece at a time
Nushell Pre-Alpha

The pipe you already know, carrying data instead of text. Nushell keeps | and throws out the parsing — ls | where size > 1mb | sort-by modified needs no awk, no cut, and no counting of whitespace-separated fields.

  • Columns have names, not numbers — get size instead of awk '{print $5}', and it cannot drift when the output format changes
  • No word splitting and no IFS — a value with a space in it is one value, in every context, with nothing to quote
  • sort, uniq --count, length, first, where are builtins over typed data, so the sort | uniq -c | sort -rn chain collapses to one command
  • from json makes jq unnecessary — JSON, YAML, TOML, CSV and XML all decode into the same records and tables
  • Real floating point, so no more shelling out to bc; and 1kb and 1min + 30sec are typed values, not strings
  • Errors are structured values with try/catch, replacing set -euo pipefail and the $? dance
Drag cards to reorder · your order is saved locally