我正在尝试运行以下逻辑
if [-f $file] && [$variable -lt 1] ; then
some logic
else
print "This is wrong"
fi
失败并出现以下错误
MyScipt.ksh[10]: [-f: not found
如果第10行是if条件,我已经输入了。
我也试过
if [-f $file && $variable -lt 1] ; then
给出了同样的错误。
我知道这是一个语法错误,但我不确定,当我在&&
if block
的多个条件时,正确的语法是什么
答案 0 :(得分:3)
[
不是运算符,它是程序的名称(或者有时是内置函数)。使用type [
进行检查。无论如何,您需要在其后面放置一个空格,以便命令行解析器知道该怎么做:
if [ -f $file ]
在这种情况下,&&
运算符可能无法执行您想要的操作。您应该阅读bash(1)
documentation.在这种特定情况下,您似乎想要的是:
if [ -f $file -a $variable -lt 1 ]
或者更现代的bash语法:
if [[ -f $file && $variable -lt 1 ]]
答案 1 :(得分:2)
[
语法秘密地是一个程序!
$ type [
[ is a shell builtin
$ ls -l $(which [)
-rwxr-xr-x 1 root root 35264 Nov 19 16:25 /usr/bin/[
由于shell解析(技术上和#34; lexes")命令行的方式,它会看到:
if
- 关键字[-f
- 计划[-f
$file]
- [-f
程序的字符串参数,由$file
和]
的值构成。如果$file
是" asdf",那么这将是asdf]
等等,按照你的命令行事。你需要做的是包括空格,shell用来分隔命令的不同部分(标记):
if [ -f "$file" ]; then
现在[
独立,可以被识别为命令/程序。另外,]
自称为[
的参数,否则[
会抱怨。关于这个的更多说明:
;
之前或之后放置空格,因为这是shell识别的特殊分隔符。在if-test中使用&&
并不是通常的方法。 [
(也称为test
)将-a
理解为"和"所以这就是你想要的:
if [ -f "$file" -a "$variable" -lt 1 ]; then
答案 2 :(得分:1)
在if
块中使用-a表示AND。
请注意-f选项前面的空格。
if [ -f $file -a $variable -lt 1] ; then
some logic
else
print "This is wrong"
fi