script code for end-line

Arthur Chance freebsd at qeng-ho.org
Sat Sep 9 16:38:17 UTC 2017


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).


More information about the freebsd-questions mailing list