Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Sep 2017 17:38:05 +0100
From:      Arthur Chance <freebsd@qeng-ho.org>
To:        Ernie Luzar <luzar722@gmail.com>, Yuri Pankov <yuripv@gmx.com>
Cc:        Polytropon <freebsd@edvax.de>, "freebsd-questions@freebsd.org" <freebsd-questions@freebsd.org>
Subject:   Re: script code for end-line
Message-ID:  <cef84d61-4056-9d17-0d36-0c00de98c76c@qeng-ho.org>
In-Reply-To: <59B4087B.2070005@gmail.com>
References:  <59B332A3.1000205@gmail.com> <20170909030257.d2718c00.freebsd@edvax.de> <c8715d2d-cb1f-592b-7541-a556fa5645a7@gmx.com> <59B4087B.2070005@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 09/09/2017 16:27, Ernie Luzar wrote:
> Yuri Pankov wrote:
>> On Sat, 9 Sep 2017 03:02:57 +0200, Polytropon wrote:
>>> On Fri, 08 Sep 2017 20:15:31 -0400, Ernie Luzar wrote:
>>>>
>>>> I have a file that has blank lines with ^M in position one.
>>>>
>>>> I have this  if [ "$end-line" = "^M"]; then
>>>>
>>>>
>>>> Is that the correct way to code that between the quotes?
>>>
>>> That will only match the literal string ^M (^ and M).
>>> String evaluation and comparison at this low level
>>> isn't a native skill of sh. There is a way of encoding
>>> characters as octal values, such as \015 for \r, which
>>> equals ^M and 0x0D, but /bin/test (which is [) can only
>>> compare strings.
>>>
>>> Here is a terrible workaround (not tested):
>>>
>>> if [ `echo ${end-line} | od -x | head -n 1 | awk '{ print $2 }'` =
>>> "000d" ]; then
>>>     ... do something ...
>>> fi
>>>
>>> Check if there is already a tool for what you're trying
>>> to accomplish (e. g., tr, sed, recode, iconv). ;-)
>>
>> Actually, you can insert real ^M characters and /bin/test should be
>> able to handle them - press ctrl+V ctrl+M.
>> .
>>
> 
> I read the man page on the test command and did not come away with the
> syntax to use in a script. An example showing usage inside of the "if"
> statement sure would be more helpful to understand how it works.

As we're talking Bourne shell, "man sh" and look for the $'...' string form.

Dollar-Single Quotes
       Enclosing characters between $' and ' preserves the literal mean‐
       ing of all characters except backslashes and single quotes.  A
       backslash introduces a C-style escape sequence:

-- 
An amusing coincidence: log2(58) = 5.858 (to 0.0003% accuracy).



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?cef84d61-4056-9d17-0d36-0c00de98c76c>