set-mark isn't a bash command, it's a readline command. It's used to set a "mark" on a specific location in the command line you are currently editing.
That mark can then be used in other readline editing operations.
Full documentation for readline may not be installed by default. Depending on your distribution it may be in a separate package, with a name like
readline-doc, in GNU Info file format (requires, e.g.,
pinfo to view). It is also available on the web at https://tiswww.case.edu/php/chet/readline/rltop.html
It is also documented in the bash man page, and in the man pages of several other GNU programs that use readline. Run
man bash and search for
Readline Command Names
The following is a list of the names of the commands and the default
key sequences to which they are bound. Command names without an
accompanying key sequence are unbound by default. In the following
descriptions, point refers to the current cursor position, and
mark refers to a cursor position saved by the
The text between the point and mark is referred to as the
Note that readline commands are for both interactive use (i.e. while editing a command line) and programmatic use (e.g. in your
~/.inputrc). That is why some of the commands have options/arguments.
BTW, there aren't many readline commands that make any use of marks or regions (The point is used frequently, by many readline commands). They are:
Two with default key-bindings:
set-mark (C-@, M-<space>)
Set the mark to the point. If a numeric argument is supplied, the mark is set to that position.
exchange-point-and-mark (C-x C-x)
Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark.
So you can mark the current cursor position with
Meta-<space>and swap the mark for the current cursor position by typing
Ctrl-x twice. i.e. useful for jumping back and forth between two positions in the line.
and two without default key-bindings:
Kill the text in the current region.
Copy the text in the region to the kill buffer.
To use either of these while interactively editing on the command line, you'd have to bind them to a key.