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