From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 47856 invoked by alias); 7 Sep 2016 17:35:21 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 47847 invoked by uid 89); 7 Sep 2016 17:35:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=3.2 required=5.0 tests=BAYES_80,FREEMAIL_FROM,KAM_THEBAT,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 spammy=terrible, andrey, Repin, repin X-HELO: forward2o.cmail.yandex.net Received: from forward2o.cmail.yandex.net (HELO forward2o.cmail.yandex.net) (37.9.109.243) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 07 Sep 2016 17:35:11 +0000 Received: from smtp2j.mail.yandex.net (smtp2j.mail.yandex.net [IPv6:2a02:6b8:0:801:1::11]) by forward2o.cmail.yandex.net (Yandex) with ESMTP id ED53320F10; Wed, 7 Sep 2016 20:35:07 +0300 (MSK) Received: from smtp2j.mail.yandex.net (localhost.localdomain [127.0.0.1]) by smtp2j.mail.yandex.net (Yandex) with ESMTP id 51FEB1060C41; Wed, 7 Sep 2016 20:35:06 +0300 (MSK) Received: by smtp2j.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id ObzKwDLbMf-Z68SR8xC; Wed, 07 Sep 2016 20:35:06 +0300 (using TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (Client certificate not present) Authentication-Results: smtp2j.mail.yandex.net; dkim=pass header.i=@yandex.ru X-Yandex-Suid-Status: 1 0,1 0 Received: from [192.168.1.10] (HELO daemon2.darkdragon.lan) by daemon2 (Office Mail Server 0.8.12 build 08053101) with SMTP; Wed, 07 Sep 2016 17:27:42 -0000 Date: Wed, 07 Sep 2016 17:35:00 -0000 From: Andrey Repin Reply-To: cygwin@cygwin.com Message-ID: <15510127987.20160907202742@yandex.ru> To: Kipton Moravec , cygwin@cygwin.com Subject: Re: Bash shell script issue In-Reply-To: <1709131555.354781.1473264514358@mail.yahoo.com> References: <330568691.2384551.1473201409220.ref@mail.yahoo.com> <330568691.2384551.1473201409220@mail.yahoo.com> <1709131555.354781.1473264514358@mail.yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-09/txt/msg00116.txt.bz2 Greetings, Kipton Moravec! > dalkmora@DALM0048 ~/walnut/dp2b_walnut_customer_flextronics/walnut > $ od -cx testconvert1.sh > 0000000 # ! / b i n / b a s h \r \n e c h > 2123 622f 6e69 622f 7361 0d68 650a 6863 > 0000020 o $ P W D \r \n p r o j e c t _ > 206f 5024 4457 0a0d 7270 6a6f 6365 5f74 > 0000040 r o o t = $ P W D \r \n e c h o > 6f72 746f 243d 5750 0d44 650a 6863 206f > 0000060 $ p r o j e c t _ r o o t \r \n x > 7024 6f72 656a 7463 725f 6f6f 0d74 780a > 0000100 = $ { p r o j e c t _ r o o t } > 243d 707b 6f72 656a 7463 725f 6f6f 7d74 > 0000120 / t o o l s \r \n e c h o $ x \r > 742f 6f6f 736c 0a0d 6365 6f68 2420 0d78 > 0000140 \n e c h o $ { x } | c a t > 650a 6863 206f 7b24 7d78 7c20 6320 7461 > 0000160 - A > 2d20 0041 > 0000163 > Shows there is not "careless editing". > So "Insufficient quoting" means nothing to me. How should it be? Put quotes around any variable expansion you are not in control of. > I was taking the example from a shell script I found. > So I added quoting on the echo: > #!/bin/bash > echo "$PWD" Good. > project_root=$PWD Still bad. > echo "$project_root" Good. > x=${project_root}/tools Still bad. > echo "$x" > echo "${x}" | cat -A Good. > dalkmora@DALM0048 ~/walnut/dp2b_walnut_customer_flextronics/walnut > $ ./testconvert1.sh > /home/dalkmora/walnut/dp2b_walnut_customer_flextronics/walnut > /home/dalkmora/walnut/dp2b_walnut_customer_flextronics/walnut > /toolsdalkmora/walnut/dp2b_walnut_customer_flextronics/walnut > /home/dalkmora/walnut/dp2b_walnut_customer_flextronics/walnut^M/tools^M$ > No difference. "^M" == \r == CR (Carriage Return) Switch your N++ to "LF only" line endings. > dalkmora@DALM0048 ~/walnut/dp2b_walnut_customer_flextronics/walnut > $ d2u testconvert1.sh > dos2unix: converting file testconvert1.sh to Unix format... > dalkmora@DALM0048 ~/walnut/dp2b_walnut_customer_flextronics/walnut > $ ./testconvert1.sh > /home/dalkmora/walnut/dp2b_walnut_customer_flextronics/walnut > /home/dalkmora/walnut/dp2b_walnut_customer_flextronics/walnut > /home/dalkmora/walnut/dp2b_walnut_customer_flextronics/walnut/tools > /home/dalkmora/walnut/dp2b_walnut_customer_flextronics/walnut/tools$ > That fixed it, but I still do not understand it. > Why are there ^M (carriage return) in the middle of a line? Because of the incorrect line endings. When you assign "project_root=$PWD", you're, in fact, assigning "project_root=$PWD\r" Same for x and for the case where you quote part of the string. project_root="$PWD"\r is treated the same as project_root="$PWD\r" There's one way to force end of line before EOL, but I won't tell you to not promote bad behavior. What d2u did is removed these bogus CR characters and your script now works as expected. > I can understand the confusion at the end of the line. But there was none > shown in the middle from od command. It was inherited from previous assignment. P.S. Also, "insufficient quoting" issue is unrelated to incorrect line endings and is meant to prevent ambiguous assignments like x="Hello; echo rm -rf /" y=$x -- With best regards, Andrey Repin Wednesday, September 7, 2016 20:14:46 Sorry for my terrible english... -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple