在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
结果:
所以我试着逃避星号
cronSen=`echo "*/$a * * * * bash /etc/init.d/ckDskCheck.sh"`
但它仍然不起作用
任何帮助将不胜感激,感谢所有的帮助
你有两个问题:
在反引号中无用的回声
总是引用你的echo
所以固定代码是
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
的单个文件。)
更具体地说,任何包含文件名的东西都应该被引用。
包含要循环使用的标记列表的变量或扩展的通配符不太常见,所以我们有时缩写为“引用所有内容,除非您确切知道自己在做什么”。
回显变量时必须使用双引号:
echo "$cronSen"
如果你不使用双引号, bash
将会看到*
并执行文件名扩展。 *
展开到当前目录中的所有文件。