Build an alphabetised polyglot As TIO can show, every letter of the Latin alphabet is represented when it comes to languages. For every letter there is at least 1 programming language whose name begins with that letter. Your task is to create a polyglot in order to demonstrate that.
Your program should be runnable in between 2 and 26 different languages, each of which starts with a different letter. However, if your program runs in \$N\$ languages, the languages used must have the first \$N\$ letters of the alphabet as the first letter of their names. So if your program runs in 5 languages, the languages must start with A, B, C, D and E. (e.g. A Pear Tree, BrainSpace, C++, Dash and Enlist)
Your program should take no input, and output a constant string: the alphabet (case-irrelevant, in order), but with the letter of the language name removed. So the language beginning with A should output BCDEFGHIJKLMNOPQRSTUVWXYZ (or the equivalent lower case version). Case doesn’t have to be consistent for different languages, but it does between runs in the same language.
Any languages are fair game, so long as no letters are repeated. This rules out using different versions for most languages (e.g. Python 2 vs Python 3), but this is only as a consequence of having unique letters. Seriously and Actually, for example, are considered different versions, but can both be used in the same answer as they start with different characters.
If using languages with custom code pages, then, as is standard, the bytes must match between programs, not characters.
Submissions are scored by number of languages used, with a tie breaker of shortest code.
AsciiDots, Bash, Cardinal, Dash, evil, fish, goruby, Haystack, Implicit, J-uby, ksh, Ly, mksh, Numberwang, OSH, Python 3, QuadR, Ruby, Super Stack!, Taco, Unefunge-98 (Pyfunge), V (Vim), Wumpus, xonsh, yash, Zsh, 1009 bytes
9 shells, 3 Rubies, some 2D (and 1D!) languages and many languages I learned just for this challenge. I really enjoyed this challenge and learned some new languages and features. I enjoyed finding a shorter way than just the raw string in some languages (in some languages generating the string seemed longer) and trying to re-use the s variable as many times as possible was fun too. I've also tried to keep the byte-count as low as possible. If I find the time and the inclination, I wonder if I could start adding the letters of the alphabet to the end instead... Crazy talk...
' # &quot;194940711909711999999999999940391270919999999999994039127zaeeeawawawawavaeeaaaaamvawvusb&quot;' #165#1#1;.040;&quot;ZYXWVTSRQPONMLKJIHGFEDCBA&quot;8 3*k,q&quot;ABCDEFGIJKLMNOPQRSTUVWXYZ&quot;o¡72&quot;8:é9:é8++:90+1®;65µ
'\&amp;p&quot;A&quot;&quot;K&quot;R&quot;M&quot;&quot;Z&quot;R&amp;o;';#   x%&quot;ABDEFGHIJKLMNOPQRSTUVWXYZ&quot;x.-$&quot;BCDEFGHIJKLMNOPQRSTUVWXYZ&quot; 0 65 65 if pop dup dup 83 sub if pop outputascii 0 fi pop 1 add dup 91 sub fi &quot;ZYXVUTSRQPONMLKJIHGFEDCBA&quot;#25&amp;o   @&quot;ABCDEFGHIJKLMNOPQRSUVWXYZ&quot;
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'
0//1;
try:echo -n;print(s[0:23]+&quot;YZ&quot;);
except:print(s[0:15]+s[16:]);&quot;&quot;&quot;/.__id__;begin ~:*;puts s.gsub ?J,&quot;&quot;;rescue;begin A;puts s.gsub ?G,&quot;&quot;;rescue;puts s.gsub ?R,&quot;&quot;;end;end;'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;';/
('Q'⎕R'')⎕A⋄'\} #&lt;esc&gt;ggdG¬AZ:s/#\|V//&quot;&quot;&quot;#\'⍵

AsciiDots
The relevant code is:
.-$&quot;BCDEFGHIJKLMNOPQRSTUVWXYZ&quot;

This needs to be wrapped in [...] to avoid [Extended Brainfuck Type I] from outputting rubbish before the desired string because of the ..
Try it online!
Bash
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

This first line sets $s to be the full alphabet in uppercase, so -z  $s is false and skipped over. $status is unset, \e is treated as an escape, not a \ and e, $BASHPID is set, $_OVM_PATH is not and $USER_ID isn't set so B is replaced with the empty string in $s (${s/B/}) and echoed it out.
Try it online!
Cardinal
The relevant code is:
x%&quot;ABDEFGHIJKLMNOPQRSTUVWXYZ&quot;x

The cursors spawn from the % and are terminated by the xs. This needed to be moved slightly to prevent additional output.
Try it online!
Dash
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

As per Bash, this first sets $s to be the full alphabet in uppercase. so -z $s is false. $status is empty, \e is an escape sequence and doesn't match e, but $- is empty in Dash so that conditional is met and we echo out ABC followed by $s with the prefix ABCD removed (${s#ABCD}).
Try it online!
evil
The relevant code is:
zaeeeawawawawavaeeaaaaamvawvusb

Try it online!
fish
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

In fish, variables aren't assigned via the s=... syntax so $s is empty meaning the first conditional is hit, the required string is echoed out and then exit is called.
Try it online!
goruby + --disable=gems
This isn't available on TIO, but is distributed with the official Ruby source and can be compiled (after the normal autoconf and ./configure steps) with make goruby. Tested on version ruby 2.8.0dev (2020-08-24T10:24:07Z master 1eb1add68a) [x86_64-linux]. The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0
0//.../.__id__;begin ~:*&amp;?,;puts s.gsub ?J,&quot;&quot;;rescue;begin A;puts s.gsub ?G,&quot;&quot;;rescue;puts s.gsub ?R,&quot;&quot;;end;end

Haystack
The relevant code is:
&quot;ABCDEFGIJKLMNOPQRSTUVWXYZ&quot;o

which outputs the required string.
Try it online!
Implicit
The relevant code is:
¡72&quot;8:é9:é8++:90+1®;65µ

This pushes  the range of 1..72 and joins the last 8 items on the stack to a string, duplicates the top the stack, increments all codepoints by 9, duplicates the stack again, increments all codepoints in the string by 8, pushes 90 to the stack and concatenates all, reverses the stack, pop off the top 65 elements then prints the stack.
Try it online!
J-uby
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0
0//.../.__id__;begin ~:*&amp;?,;puts s.gsub ?J,&quot;&quot;;rescue;begin A;puts s.gsub ?G,&quot;&quot;;rescue;puts s.gsub ?R,&quot;&quot;;end;end

This shares the declaration of s with the shells and other Ruby implementations and and .gsubs J from the string before putsing it as long as ~:*&amp;?, doesn't cause an error.
Try it online!
ksh
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

$s is set as the other shells and $status is empty, \e doesn't match e, $- is not empty, but $BASHPID is so $s is echoed removing K (${s/K/}).
Try it online!
Ly
The relevant code is:
&amp;p&quot;A&quot;&quot;K&quot;R&quot;M&quot;&quot;Z&quot;R&amp;o;

which first clears the stack then pushes the Ranges from A-K and M-Z, before &amp;outputting the stack contents and terminating (;).
Try it online!
mksh
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

As per the previous shells, the first line sets $s to be the full alphabet in uppercase, so -z $s is false and skipped over. $status is unset, \e is treated as an escape, not a \ and e, $BASHPID is set, $_OVM_PATH is not and $USER_ID is set so M is replaced with the empty string in $s (${s/M/}) and echoed it out. Tested on version 58-1.
Numberwang
The relevant code is the big number as Numberwang is just a transliteration of brainfuck:
194940711909711999999999999940391270919999999999994039127
&gt;+[+[&lt;]&gt;&gt;+&lt;+]&gt;&gt;+++++++++++++[&lt;.+&gt;-]&lt;+&gt;++++++++++++[&lt;.+&gt;-]

There's a minor amount of work to balance 4s and 7s throughout the rest of the code, alongside making sure things appear in the right order, but nothing major. Might be able to save some bytes by moving stuff around here...
Try it online!
OSH
Oh look, another shell! As per the others the relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

The main difference here is that $_OVM_PATH is set in OSH, but not in Bash, so the correct string is echoed using tr to remove the O.
Try it online!
Python 3
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0
0//1;
try:echo -n;print(s[0:23]+&quot;YZ&quot;);
except:print(s[0:15]+s[16:]);&quot;&quot;&quot;...&quot;&quot;&quot;

This shares the declaration of s with the shells and Rubies and is also shared with xonsh. The code in the try will fail in Python (echo -n), but works in xonsh so the code in the except is called, printing slices of s.
Try it online!
QuadR
The relevant code is:
('Q'⎕R'')⎕A⋄'...'⍵

In QuadR, when the final line contains ⍵ all the preceding lines are patterns to match and the final line is a transformation function. This particular transformation function just takes the alphabet ⎕A and ⎕Replaces 'Q' with '', the rest of the function after the statement separator (⋄) is just to close off all the other strings/comments/regex literals and comment out the end of the function.
Try it online!
Ruby
The relevant code is shared with J-uby and goruby:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0
0//.../.__id__;begin ~:*&amp;?,;puts s.gsub ?J,&quot;&quot;;rescue;begin A;puts s.gsub ?G,&quot;&quot;;rescue;puts s.gsub ?R,&quot;&quot;;end;end

Like the other Rubies, s is shared from the shells but in Ruby here, both the other clauses ~:*&amp;?, and A will raise exceptions so the final statement is executed which replaces R in s with the empty string.
Try it online!
Super Stack!
The relevant code is:
0 65 65 if pop dup dup 83 sub if pop outputascii 0 fi pop 1 add dup 91 sub fi

This pushes 0 and 65 (twice) to the stack, then if (which is &quot;while top of stack is truthy&quot; - non-zero), pops the top element, duplicates the new top element twice, pushes 83 and subtracts it from the next stack item down. Then if top of stack is truthy (e.g. it's not 83 - S), pop it, outputascii, push 0 and terminate with fi (since top of stack is now 0). Finally, pop, push 1, add the two top elements together (increment), duplicate, push 91 and subtract, terminate the loop, which will happen if the last output char was 90 (Z).
Try it online!
TacO
The relevant code is:
@&quot;ABCDEFGHIJKLMNOPQRSUVWXYZ&quot;

Try it online!
Unefunge-98 (PyFunge)
The relevant code is:
&quot;ZYXWVTSRQPONMLKJIHGFEDCBA&quot;8 3*k,q

There are a few commands before this that are executed and push things to the stack, but basically this just pushes the required chars in reverse, then pushes 8 and 3 and multiplies them. The k command repeats the next command TOS (24) + 1 times, outputting the required string and quits.
Try it online!
V (vim) + -v
The relevant code is:
&lt;esc&gt;ggdG¬AZ:s/V//&quot;...

Which first leaves insert mode (&lt;esc&gt;), goes to the first line of text (gg), deletes to the last line (dG), inserts the letters from A to Z (¬AZ), then finally replaces V with the empty string (:s/V//). The rest of the line is commented out (&quot;).
Try it online!
Wumpus
The relevant code is:
...#220#1#1;.
...&quot;ZYXVUTSRQPONMLKJIHGFEDCBA&quot;#25&amp;o @

The #220#1#1 pushes 220, 1, 1 to the stack, then ; pops off the last item then calls . which jumps the IP to line 1, char 220 and executes. We need to just because TacO mandates only one @ in the code.
Try it online!
xonsh
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0
0//1;
try:echo -n;print(s[0:23]+&quot;YZ&quot;);
except:print(s[0:15]+s[16:]);&quot;&quot;&quot;...&quot;&quot;&quot;

xonsh is a Python based shell so the code is shared with Python 3 and uses the same s var as the shells and Rubies. I've used a technique I've used in many polyglots with Ruby to get this code in. 0//1 is integer division and the echo -n works fine since xonsh is a shell so the execution of printing the required substring portion of s with the literal string YZ concatenated, then the rest of the program is a &quot;&quot;&quot; string.
yash
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

Like the other shells, but in yash, the sequence \e is not an escape sequence and so is just the string \e which matches e so $s is printed substituting Y for the empty string (${s/Y/}).
Try it online!
Zsh + --continueonerror
The relevant code is:
s=&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;0#'...'
[ -z $s ]&amp;&amp;echo ABCDEGHIJKLMNOPQRSTUVWXYZ&amp;&amp;exit;echo `[ $status = 1 ]&amp;&amp;echo \${s/Z/}&amp;&amp;exit;[ \e =~ e ]&amp;&amp;echo \${s/Y/}&amp;&amp;exit;\[ -z \$- \]&amp;&amp;echo ABC\${s#ABCD}&amp;&amp;exit;[ -z \$BASHPID ]&amp;&amp;echo \${s/K/}&amp;&amp;exit;[ -z $_OVM_PATH ]||echo $s|tr -d O;[ -z $_OVM_PATH ]||exit;[[ -n $USER_ID ]]&amp;&amp;echo \${s/M/}||echo \${s/B/}`;'...' #

Zsh is less tolerant of errors in a script than the other shells and so necessitates the --continueonerror flag. In Zsh $status is also set (in fish too) when a command fails, so if $status is 1, then $s is echoed out, substituting Z for the empty string (${s/Z/}).
Try it online!

Validation suite.