Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing asterisk ("*") in bash shell

Tags:

bash

shell

a=5
echo "*/$aMin * * * * bash /etc/init.d/ckDskCheck.sh"

When I try to run the following code, it displays properly

*/5 * * * * bash /etc/init.d/ckDskCheck.sh

But when I try to assign the result using the following code to the variable and print it out, it displays as this:

a=5
cronSen=`echo "*/$a * * * * bash /etc/init.d/ckDskCheck.sh"`
echo $cronSen

Result:

enter image description here

So I try to escape the asterisk by

cronSen=`echo "\*/$a \* \* \* \* bash /etc/init.d/ckDskCheck.sh"`

But it still doesn't work. Why? How can I fix this?

like image 758
user2499325 Avatar asked Aug 13 '14 02:08

user2499325


1 Answers

You have two problems:

  1. Useless Use of Echo in Backticks

  2. Always quote what you echo

So the fixed code is

a=5
cronSen="*/$a * * * * bash /etc/init.d/ckDskCheck.sh"
echo "$cronSen"

It appears you may also have a Useless Use of Variable, but perhaps cronSen is useful in a larger context.

In short, quote everything where you do not require the shell to perform token splitting and wildcard expansion.

Token splitting;

 words="foo bar baz"
 for word in $words; do
      :

(This loops three times. Quoting $words would only loop once over the literal token foo bar baz.)

Wildcard expansion:

pattern='file*.txt'
ls $pattern

(Quoting $pattern would attempt to list a single file whose name is literally file*.txt.)

In more concrete terms, anything containing a filename should usually be quoted.

A variable containing a list of tokens to loop over or a wildcard to expand is less frequently seen, so we sometimes abbreviate to "quote everything unless you know precisely what you are doing".

like image 99
tripleee Avatar answered Sep 28 '22 17:09

tripleee