Não vejo isso na página man, mas o código-fonte verifica se o programa é invocado como tcsh ou não. Se for , o código define o prompt conforme observado na pergunta:
HIST = '!'; HISTSUB = '^'; PRCH = tcsh ? '>' : '%'; /* to replace %# in $prompt for normal users */ PRCHROOT = '#'; /* likewise for root */ word_chars = STR_WORD_CHARS; bslash_quote = 0; /* PWP: do tcsh-style backslash quoting? */
A lógica do programa é bastante fácil de ler:
{
char *t;
t = strrchr(argv[0], '/');
#ifdef WINNT_NATIVE
{
char *s = strrchr(argv[0], '\');
if (s)
t = s;
}
#endif /* WINNT_NATIVE */
t = t ? t + 1 : argv[0];
if (*t == '-') t++;
progname = strsave((t && *t) ? t : tcshstr); /* never want a null */
tcsh = strncmp(progname, tcshstr, sizeof(tcshstr) - 1) == 0;
}
e
static const char tcshstr[] = "tcsh";
Por isso, não passaria no teste se fosse nomeado tcsh10 , por exemplo.