在bash shell中打印星号(*)

时间:2014-08-13 02:17:42

标签: bash shell

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

当我尝试运行以下代码时,它会正确显示 * / 5 * * * * bash /etc/init.d/ckDskCheck.sh

但是当我尝试使用以下代码将结果分配给变量并将其打印出来时,它显示为

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

结果: enter image description here

所以我试图通过

来逃避星号
cronSen=`echo "\*/$a \* \* \* \* bash /etc/init.d/ckDskCheck.sh"`

但它仍然无法运作

非常感谢任何帮助,感谢所有帮助

2 个答案:

答案 0 :(得分:5)

你有两个问题:

  1. 在反引号中无用的回声

  2. 始终引用您echo

  3. 的内容

    所以固定代码是

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

    看起来您可能还有无用的变量,但是cronSen可能在更大的上下文中很有用。

    简而言之,引用您不需要shell执行令牌拆分和通配符扩展的所有内容。

    令牌分裂;

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

    (这循环三次。引用$words只会在文字标记foo bar baz上循环一次。)

    通配符扩展:

    pattern='file*.txt'
    ls $pattern
    

    (引用$pattern会尝试列出名称字面为file*.txt的单个文件。)

    更具体地说,通常应该引用包含文件名的任何内容。

    包含要循环的令牌列表或要扩展的通配符列表的变量不常见,因此我们有时会缩写为"引用所有内容,除非您确切知道自己在做什么"。

答案 1 :(得分:3)

回显变量时必须使用双引号:

echo "$cronSen"

如果您不使用双引号,bash会看到*并执行filename expansion*扩展到当前目录中的所有文件。