bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

It is possible to remove the readonly attribute from {BASH, SHELL}OPTS


From: Emanuele Torre
Subject: It is possible to remove the readonly attribute from {BASH, SHELL}OPTS
Date: Thu, 25 Jan 2024 01:06:32 +0100
User-agent: Mutt/2.2.12 (2023-09-09)

I recently discovered that it is possible to set attributes on readonly
variables

  $ declare -p PPID
  declare -ir PPID="759437"
  $ declare -l PPID
  $ declare -p PPID
  declare -irl PPID="759437"

I noticed SHELLOPTS and BASHOPTS among the default readonly variables
set by bash.
They are modified by bash whenever you set a set option or shopt.

I tried setting the -i attribute on them, and got this result:

  $ declare -i SHELLOPTS
  $ set -f
  bash: set: 
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noglob:
 syntax error in expression (error token is 
":emacs:hashall:histexpand:history:interactive-comments:monitor:noglob")
  $ declare -p SHELLOPTS
  declare -i 
SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
  $ set -C
  bash: set: 
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob:
 syntax error in expression (error token is 
":emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob")
  $ declare -p SHELLOPTS
  declare -i 
SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
  $ SHELLOPTS=123; declare -p SHELLOPTS
  declare -i SHELLOPTS="123"
  $ set +B
  
emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob: 
syntax error in expression (error token is 
":hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob")
  $ declare -p SHELLOPTS
  declare -i SHELLOPTS="123"
  $ declare +i SHELLOPTS=hello; declare -p SHELLOPTS
  declare -- SHELLOPTS="hello"
  $ set -o posix
  $ declare -p SHELLOPTS
  declare -r 
SHELLOPTS="emacs:hashall:histexpand:history:interactive-comments:monitor:noclobber:noglob:posix"

The arithmetic syntax error caused by trying to assign the new list of
options to SHELLOPTS prevents bash from changing its value, and
re-adding the readonly attribute to SHELLOPTS.

Then SHELLOPTS can be modified, and unset freely. :-)

The same is possible with BASHOPTS.

o/
 emanuele6



reply via email to

[Prev in Thread] Current Thread [Next in Thread]