Path: ...!weretis.net!feeder9.news.weretis.net!panix!usenet.blueworldhosting.com!diablo1.usenet.blueworldhosting.com!nnrp.usenet.blueworldhosting.com!.POSTED!not-for-mail From: "Arti F. Idiot" Newsgroups: comp.unix.shell Subject: Re: bash aesthetics question: special characters in reg exp in [[ ... =~~ ... ]] Date: Mon, 22 Jul 2024 22:00:00 -0600 Organization: Anarchists of America Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Tue, 23 Jul 2024 04:00:01 -0000 (UTC) Injection-Info: nnrp.usenet.blueworldhosting.com; logging-data="91241"; mail-complaints-to="usenet@blueworldhosting.com" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:AG6JUDB7H/wlPbpD0fegYDlQyLM= sha256:HL5RS1a0sntLcqKi2ZB7q3vPBtmBn3a9P8U1B49sOR0= sha1:RExEUNYfC6BNX5mC6R0SJYpV7DI= sha256:0saFfpBABkfXvPN4e2ksUvN0Rl3pg/KReeVm/naPBs0= In-Reply-To: Content-Language: en-US Bytes: 2326 Lines: 30 On 7/22/24 3:59 PM, Kenny McCormack wrote: > Note: this is just a question of aesthetics. Functionally, it all works as > expected. > > Sample bash code: > > f="$(fortune)" # Get some multi-line output into "f" > # Look for foo followed by bar on the same line > [[ "$f" =~ foo[^$'\n']*bar ]] && echo "foo bar" > > The point is you need the "anything other than a newline" or else it might > match foo on one line and bar on a later line. The above is the only way I > could figure out to express a newline in the particular flavor of reg exps > used by the =~ operator. > > The problem is that if the above is in a function, when you list out the > function with "type funName", the \n has already been digested and > converted to a hard newline. This makes the listing look strange. I'd > rather see "\n". > > Is there any way to get this? > Not sure this really addresses your 'type funcName' query but maybe somewhat better output from 'type funcName' ? : ... regex=$(printf 'foo[^$\n]*bar') [[ "$f" =~ $regex ]] && echo "foo bar" Kind of wish the regex string could be bracketed by "/" as in awk.