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:
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?
You have two problems:
Useless Use of Echo in Backticks
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".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With