9

I entered the following lines into a shell script called “test.sh”:

#!/bin/bash
echo Hello World
STR=”Hello Again”
echo $STR

After chmod to executable, I ran the script with ./test.sh. However, I get the message

./test.sh: line 3  STR: Command not found

What am I doing wrong?

  • 1
    Did terdon's answer solve your question? If not it could be that you accidentally have spaces around your variable assignment. – Arronical Jul 5 '16 at 9:38
  • @Voker just an stylistic comment based on my suggestion: I think it is best to use Blockquote for error messages instead of Code block; at the end, this is not code but some text the Bash interpreter is returning. – fedorqui Jul 5 '16 at 12:23
  • @fedorqui why? Quote blocks don't preserve formatting, they interpret special characters (e.g. *,_, #) as markdown, and are rendered differently by screen reader software. I think that anything that is either given or received by a computer should be in code blocks. You never know when the exact format can be relevant. Especially when dealing with things like this where unicode comes into play. – terdon Jul 6 '16 at 11:24
  • @terdon it really depends on cases and there is even a request to Add format for logs/warnings/error messages which allows word-wrapping and preserves newlines. To me, if it is just a line like this case, I prefer quote blocks since it makes it easier to understand what is code and what is errors. – fedorqui Jul 6 '16 at 11:42
  • @fedorqui I guess we should take it to meta but I always prefer fixed-width font and exact format reproduction whenever posting a message that is either read or produced by a computer. – terdon Jul 6 '16 at 11:57
20

What are you using to create that script? The quote characters you have in your question are wrong. They're not regular double quotes (") but . The regular quotes are:

$ uniprops '"' | head -1
U+0022 ‹"› \N{QUOTATION MARK}

While yours are:

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

So, just use regular quotes and you'll be fine:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
  • 5
    @JaySilver you're very welcome but, if this answer solved your issue, please take a moment and accept it by clicking on the check mark to the left. That will mark the question as answered and is the way thanks are expressed on the Stack Exchange sites. – terdon Jul 5 '16 at 9:21
  • 1
    uniprops looks cool. I found the page (is that our own tchrist?). Do I have to download it from source, or is it available in a package manager somewhere? E: Unable to locate package uniprops – TRiG Jul 5 '16 at 13:57
  • 1
    I don't use Perl much (barely at all). I just want to know more than the minimum about Unicode. – TRiG Jul 5 '16 at 14:52
  • 1
    @TRiG well, in Ubuntu, it's as simple as sudo apt-get install cpanminus; sudo cpanm Unicode::Tussle and then you have the uniprops command. Of course, tchrist wrote the damn thing so you may as well ask him in chat :) – terdon Jul 5 '16 at 14:56
  • 1
    I regretfully run into this sort of nonsense all the time. A particular wiki system at my employer seems to have a nasty habit of translating hyphen-minus - U+002D into hyphen U+2010 (or similar). Then things like uname ‐a stop working :-/. Email clients often have similar nefarious habits - especially when using HTML formatting - another good reason to prefer plain-text emails. – Digital Trauma Jul 5 '16 at 18:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.