Printing asterisk (“*”) in bash shell

后端 未结 2 1582
被撕碎了的回忆
被撕碎了的回忆 2020-12-02 02:14
a=5
echo \"*/$aMin * * * * bash /etc/init.d/ckDskCheck.sh\"

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

*/5 * * * *          


        
相关标签:
2条回答
  • 2020-12-02 02:47

    You must use double quote when echo your variable:

    echo "$cronSen"
    

    If you don't use double quote, bash will see * and perform filename expansion. * expands to all files in your current directory.

    0 讨论(0)
  • 2020-12-02 02:52

    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".

    0 讨论(0)
提交回复
热议问题