Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Carriage return in a bash variable

I have a bash variable that ends with \r\n:

$ # Not the real command to get VAR's value, just an example
$ VAR="$(echo -en 'hello\r\n')"
$ hexdump -C <<< "$VAR"
00000000  68 65 6c 6c 6f 0d 0a                              |hello..|
00000007

I would like to drop the \r (the \n itself is correctly handled by bash).

I may trim it (VAR="$(tr -d '\r' <<< "$VAR")"), but that implies to run a process just for that task.

I tried using "Remove matching suffix pattern" bash feature, but cannot find which pattern to use (e.g., ${VAR%\r}, ${VAR%\x0d}, ${VAR%[\r]}—but neither of them does work).

Any idea how to drop the \r without creating a subprocess?

like image 547
audeoudh Avatar asked Mar 10 '26 18:03

audeoudh


1 Answers

Use the ANSI C quotes. With substitution, use

var=${var//$'\r'}

If you want to only remove the \r before the final \n, you can use

var=${var%$'\r\n'}$'\n'

i.e. you have to remove both the \r and \n, so you need to add the \n back.

like image 193
choroba Avatar answered Mar 12 '26 09:03

choroba



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!