2023-07-07 15:52:28 -0400, Chet Ramey: [...] > Historical versions of test made the argument to -t optional here. I can > continue to support that in default mode for backwards compatibility, but > it will be an error in posix mode. [...]
I think you may have overlooked the bottom part of my email (possibly because it was hidden by your MUA as it included quoted text) that included comments on the code and a patch. bash hasn't supported [ -t ] as an alias for [ -t 1 ] since 2.02 and possibly earlier AFAICT since it started supporting the POSIX rules where [ any-non-empty-single-argument ] returns true, and having [ -t ] to check whether stdout is a terminal is not allowed. The problem here is that some code to support that haven't been removed at the time the POSIX rules were implemented. The patch I suggested just removes that code. ksh93 does support [ -t ] when the -t is literal: $ ksh93 -c '[ -t ]' > /dev/null || echo stdout is not a terminal stdout is not a terminal $ ksh93 -c '[ "-t" ]' > /dev/null || echo stdout is not a terminal stdout is not a terminal $ var=-t ksh93 -c '[ "$var" ]' > /dev/null && echo '$var is non-empty' $var is non-empty But there's no point going there since that breaks POSIX compliance for no good reason as [ -t ] as an alias for [ -t 1 ] hasn't been supported for decades so scripts that were doing [ -t ] would have long been fixed to [ -t 1 ]. [...] > > I also noticed that the fact that -a/-o were deprecated (by POSIX at > > least) and made for unreliable test expressions was not noted in the > > manual. So I suggest the patch below: > > I added some language about this, noting that POSIX has deprecated them > and recommending scripts not use them. Thanks for the suggestion. [...] Note that "(" and ")" are also obsoleted by POSIX and as a result any usage of test with 5 or more arguments (hence why I flagged them as (DEPRECATED) in the doc patch I was suggesting. -- Stephane