EXPR(1)

πŸ’– EXPR(1) β€” bestie edition πŸ’–

okay so this is expr from the uutils coreutils manual, section 1 of the general commands manual. pull up a chair, grab a boba, we're doing arithmetic in the shell and it's gonna be cute. πŸ§‹βœ¨


🌸 NAME 🌸

expr β€” print the value of EXPRESSION to standard output. that's it. that's the whole job. she's an icon, she's a legend, she evaluates your little expression and hands you the answer. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

expr [EXPRESSION]
expr [OPTIONS]

two whole moods. either you give her an expression, or you give her options. boom. πŸŽ€


✨ DESCRIPTION ✨

Print the value of EXPRESSION to standard output. fr fr, that's the entire description, she said what she said. 🌈


πŸ‘‘ OPTIONS πŸ‘‘

  • --version β€” output version information and exit. she tells you who she is and then she's gone, main character exit. πŸšͺπŸ’¨
  • --help β€” display this help and exit. your girl is helpful!!
  • [expression] β€” the expression u wanna evaluate, bestie. 🫢

πŸ’œ EXTRA πŸ’œ

okay so this is the part where it gets real. a blank line below separates increasing precedence groups β€” like, the blank lines in the list are literally telling you who binds tighter. not me getting emotional over whitespace. 😭

EXPRESSION may be:

  • ARG1 | ARG2 β€” gives u ARG1 if it's neither null nor 0, otherwise u get ARG2. the "pick the good one" operator. πŸ“
  • ARG1 & ARG2 β€” gives u ARG1 if neither argument is null or 0, otherwise u get 0. both have to show up or nobody does.
  • ARG1 < ARG2 β€” ARG1 is less than ARG2
  • ARG1 <= ARG2 β€” ARG1 is less than or equal to ARG2
  • ARG1 = ARG2 β€” ARG1 is equal to ARG2
  • ARG1 != ARG2 β€” ARG1 is unequal to ARG2
  • ARG1 >= ARG2 β€” ARG1 is greater than or equal to ARG2
  • ARG1 > ARG2 β€” ARG1 is greater than ARG2
  • ARG1 + ARG2 β€” arithmetic sum of ARG1 and ARG2
  • ARG1 - ARG2 β€” arithmetic difference of ARG1 and ARG2
  • ARG1 * ARG2 β€” arithmetic product of ARG1 and ARG2
  • ARG1 / ARG2 β€” arithmetic quotient of ARG1 divided by ARG2
  • ARG1 % ARG2 β€” arithmetic remainder of ARG1 divided by ARG2
  • STRING : REGEXP β€” anchored pattern match of REGEXP in STRING
  • match STRING REGEXP β€” same as STRING : REGEXP
  • substr STRING POS LENGTH β€” substring of STRING, POS counted from 1
  • index STRING CHARS β€” index in STRING where any CHARS is found, or 0
  • length STRING β€” length of STRING
  • + TOKEN β€” interpret TOKEN as a string, even if it is a keyword like match or an operator like /
  • ( EXPRESSION ) β€” value of EXPRESSION
⚠️ BEWARE: many operators need to be escaped or quoted for shells. this is the #1 thing that eats your afternoon, bestie, do not skip the backslashes. πŸ™ˆ

comparisons are arithmetic if both ARGs are numbers, else lexicographical.

pattern matches return the string matched between \( and \) or null; if \( and \) are not used, they return the number of characters matched or 0.

exit status tea β˜• β€” it's 0 if EXPRESSION is neither null nor 0, 1 if EXPRESSION is null or 0, 2 if EXPRESSION is syntactically invalid, and 3 if an error occurred. memorize them, they're your love language now. πŸ’€

environment variables (the debug girlies 🧚):

  • EXPR_DEBUG_TOKENS=1: dump expression's tokens
  • EXPR_DEBUG_RPN=1: dump expression represented in reverse polish notation
  • EXPR_DEBUG_SYA_STEP=1: dump each parser step
  • EXPR_DEBUG_AST=1: dump expression represented abstract syntax tree

errors are reported with the expression echoed back and a caret under the offending argument whenever stderr is a terminal; anything else reading stderr gets the usual single-line message. so if ur piping somewhere, u get the normal vibe, and if ur in a terminal, she points at the problem with a little ^. πŸ’…


🌟 VERSION 🌟

v(uutils coreutils) 0.12.0


πŸŽ€ EXAMPLES πŸŽ€

get the length of a specific string:

expr length "string"

get the substring of a string with a specific length:

expr substr "string" from length

match a specific substring against an anchored pattern:

expr match "string" 'pattern'

get the first char position from a specific set in a string:

expr index "string" "chars"

calculate a specific mathematic expression:

expr expression1 +|-|*|/|% expression2

get the first expression if its value is non-zero and not null otherwise get the second one:

expr expression1 \| expression2

get the first expression if both expressions are non-zero and not null otherwise get zero:

expr expression1 \& expression2
the examples are provided by the tldr-pages project under the CC BY 4.0 License. please note that, as uutils is a work in progress, some examples might fail. 🫢 (source: <https://tldr.sh>)

okay that's the whole page!! you now officially know more about expr than 99% of the group chat. this was general commands manual, expr(1), dated 2026-09-25, running at version 0.12.0 from the uutils coreutils girlies. slay, go evaluate something, and remember to escape ur pipes. πŸ”₯πŸ‘‘πŸ’–

πŸ“¦ where this page comes from