此代码有什么问题?Shell - 表达式中的语法错误(错误标记为“0”)
if ((`date +%U` % 2 -eq 0))
then
VOLUME= "A"
else
VOLUME="B"
fi
我得到了“表达式中的语法错误(错误标记为”0“)”eror。
此代码有什么问题?Shell - 表达式中的语法错误(错误标记为“0”)
if ((`date +%U` % 2 -eq 0))
then
VOLUME= "A"
else
VOLUME="B"
fi
我得到了“表达式中的语法错误(错误标记为”0“)”eror。
您需要使用$(...)
语法使用命令替换。
你可以使用这个命令:
(($(date +%U) % 2 == 0)) && VOLUME="A" || VOLUME="B"
我不推荐使用'... && ... || ......在这种情况下 –
这是为什么? – anubhava
'foo && bar || baz'不等于'if foo;然后吧;其他baz; fi',请参阅http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3 –
您的问题是算术测试(双括号)的情况下使用-eq
运营商。
if (($(date +%U) % 2 == 0)); then VOLUME= "A" else VOLUME="B"; fi
虽然使用反引号而不是'$(...)',但是$(。 ..)'可能更好,如果你有一个支持它的外壳。 –
你不能重叠反衬,它们是一个可读性噩梦,只能用于非POSIX。虽然**'$()'是POSIX **,具有更好的可读性和其他优点(请参阅新的参考) –
试试这个。
case $(date +%U) in
*[02468]) VOLUME="A";;
*) VOLUME="B";;
esac
还请注意,=
周围的空间是不允许的。
如果您需要帮助,请尽一切努力正确设置代码的格式。 –
仅限于'sh' shell时才使用''(反引号)。查看为什么$(...)比'...'更好(反引号)? http://mywiki.wooledge.org/BashFAQ/082 –