a=5
echo "*/$aMin * * * * bash /etc/init.d/ckDskCheck.sh"
Run Code Online (Sandbox Code Playgroud)
当我尝试运行以下代码时,它显示正确
*/5****bash /etc/init.d/ckDskCheck.sh
但是当我尝试使用以下代码将结果分配给变量并将其打印出来时,它会显示为此
*/5 * * * * bash /etc/init.d/ckDskCheck.sh
Run Code Online (Sandbox Code Playgroud)
结果:

所以我试着逃避星号
a=5
cronSen=`echo "*/$a * * * * bash /etc/init.d/ckDskCheck.sh"`
echo $cronSen
Run Code Online (Sandbox Code Playgroud)
但它仍然无效
非常感谢任何帮助,感谢所有的帮助
你有两个问题:
Backticks中无用的回声
总是引用你的话 echo
所以固定代码是
a=5
cronSen="*/$a * * * * bash /etc/init.d/ckDskCheck.sh"
echo "$cronSen"
Run Code Online (Sandbox Code Playgroud)
看起来您可能还有无用的变量,但cronSen在更大的上下文中可能也很有用.
简而言之,引用您不需要shell执行令牌拆分和通配符扩展的所有内容.
令牌分裂;
words="foo bar baz"
for word in $words; do
:
Run Code Online (Sandbox Code Playgroud)
(这循环三次.引用$words只会在文字标记上循环一次foo bar baz.)
通配符扩展:
pattern='file*.txt'
ls $pattern
Run Code Online (Sandbox Code Playgroud)
(引用$pattern将尝试列出名称字面上的单个文件file*.txt.)
更具体地说,通常应引用包含文件名的任何内容.
包含要循环的标记列表或要扩展的通配符的变量不常见,因此我们有时会缩写为"引用所有内容,除非您确切知道自己在做什么".
回显变量时必须使用双引号:
echo "$cronSen"
Run Code Online (Sandbox Code Playgroud)
如果不使用双引号,bash将看到*并执行文件名扩展。*扩展到当前目录中的所有文件。