shell - 为什么带有嵌套反引号的 shell 命令会失败?

标签 shell unix backticks

我有一个包含以下内容的 shell 脚本:

var1=`expr $RANDOM % 100`
var2=`expr $RANDOM % 1000 \* 60`
...
...
sleep `expr $var2- `date -t` + $var1`

它给了我这个错误:

sleep:invalid number of operands 
expr error: invalid syntax
+ cannot execute no such file or directory
为什么?这个错误是什么意思?

最佳答案

因为反引号不能嵌套。

如果您的 shell 支持更现代的 $(...) 语法,请尝试以下操作:

var1=$(expr $RANDOM % 100)
var2=$(expr $RANDOM % 1000 \* 60)
...
...
sleep $(expr $var2 - $(date -t) + $var1)

如果没有,您可以将中间值存储在另一个变量中:

var1=`expr $RANDOM % 100`
var2=`expr $RANDOM % 1000 \* 60`
...
...
date=`date -t`
sleep `expr $var2 - $date + $var1`

(我还添加了一个空格,将 $var2- 更改为 $var2 -。)

顺便说一句,我无法尝试此操作,因为在我的系统上,date 命令没有 -t 选项。

关于shell - 为什么带有嵌套反引号的 shell 命令会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390805/

相关文章:

linux - 如何根据上一个命令比较得到下一个输入命令[bash-script]

linux - 如何在 bash 脚本中排序?

unix - 如何设置 $PATH 以便 `ssh user@host command` 起作用?

arrays - 数组初始化中的 Perl qx 执行顺序

mysql - Bash 和 MySQL 变量错误

shell - FFMPEG,.txt 文件中的倒数第二张图像未显示在视频中

linux - 如何使用shell解析命令的输出

Linux shell脚本逻辑错误

linux - 从除 1 个目录之外的所有文件中查找单词

Markdown : writing inline dplyr code if column names have spaces defined with backticks