bashshell中的多个条件
我在Bash中有这段代码, 目标是比较两个文件,如果文件匹配并且没有传递force参数,则退出。 另一方面,它应该继续下去 但是当我在没有参数的情况下运行并且脚本没有按预期停止时,我得到了这个错误, 当我通过force参数时,它工作正常。 有什么想法吗bashshell中的多个条件,bash,Bash,我在Bash中有这段代码, 目标是比较两个文件,如果文件匹配并且没有传递force参数,则退出。 另一方面,它应该继续下去 但是当我在没有参数的情况下运行并且脚本没有按预期停止时,我得到了这个错误, 当我通过force参数时,它工作正常。 有什么想法吗 if cmp -s file1 file2 && [ $1 != "-f" ] ; then "do something" exit 1 else "do som
if cmp -s file1 file2 && [ $1 != "-f" ] ; then
"do something"
exit 1
else "do something"
fi
[…]
只是一个普通的命令,本质上相当于测试
。因此,如果您传递了一个不带引号的空变量(比如$1
,当没有参数提供给您的程序时),它将尝试运行[!=“-f”]
,这会产生错误,因为您需要两个方面来与!=
进行比较
要解决此问题,您可以使用[[…]]
(需要bash
,不兼容POSIX),这不会使不带引号的变量“消失”,也可以引用变量以保持POSIX兼容:
cmp -s file1 file2 && [[ $1 != "-f" ]]
cmp -s file1 file2 && [ "$1" != "-f" ]
[…]
只是一个普通的命令,本质上相当于测试
。因此,如果您传递了一个不带引号的空变量(比如$1
,当没有参数提供给您的程序时),它将尝试运行[!=“-f”]
,这会产生错误,因为您需要两个方面来与!=
进行比较
要解决此问题,您可以使用[[…]]
(需要bash
,不兼容POSIX),这不会使不带引号的变量“消失”,也可以引用变量以保持POSIX兼容:
cmp -s file1 file2 && [[ $1 != "-f" ]]
cmp -s file1 file2 && [ "$1" != "-f" ]
最有可能的是
$1
是空的。当我使用[$1!=“-f”]]
时,使用[…]]
而不是[…]
,然后我得到了这个错误[:找不到
如果你得到了错误[:找不到
你一定没有使用bash,那么,你是如何运行脚本的?你的文件有一个shebang吗(第一行以#!
开头)?如果是,它是否指定bash
或sh
?@Andrew$SHELL
是您的用户帐户的默认交互式SHELL,不控制脚本的运行方式。shebang(#!
)是什么SHELL行指定?如果您没有shebang,大多数shell和库函数将使用sh
调用脚本。例外情况是bash,它使用bash
调用此类脚本。自动警告有关引用问题。很可能$1
为空。请使用[…]
而不是[…]
当我使用[$1!=“-f”]
时,我得到了这个错误[[:找不到
如果你得到了错误[[:找不到
你一定没有使用bash,那么,你是如何运行脚本的?你的文件是否有一个shebang(第一行以#!
开头)?如果是,它是否指定bash
或sh
?@Andrew$SHELL
是您的用户帐户的默认交互式SHELL,并且不控制脚本的运行方式。shebang(#!
)使用的SHELL是什么行指定?如果您没有shebang,大多数shell和库函数将使用sh
调用脚本。例外是bash,它使用bash
调用此类脚本。自动警告有关引用问题。谢谢,这第二个选项适用于我。谢谢,这第二个选项适用于我。