gpt4 book ai didi

Bash if 语句不能正常工作

转载 作者:行者123 更新时间:2023-11-29 09:37:56 31 4
gpt4 key购买 nike

我有一个 bash 语句来测试命令行参数。如果传递给脚本的参数是“clean”,则脚本会删除所有 .o 文件。否则,它会构建一个程序。然而,无论传递了什么(如果有的话),脚本仍然认为正在传递参数“clean”。

#!/bin/bash
if test "`whoami`" != "root" ; then
echo "You must be logged in as root to build (for loopback mounting)"
echo "Enter 'su' or 'sudo bash' to switch to root"
exit
fi
ARG=$1
if [ $ARG == "clean" ] ; then
echo ">>> cleaning up object files..."
rm -r src/*.o
echo ">>> done. "
echo ">>> Press enter to continue..."
read
else
#Builds program
fi

最佳答案

第一版问题的答案

在 bash 中,空格很重要。替换:

[ $ARG=="clean" ]

与:

[ "$ARG" = "clean" ]

bash 将 $ARG=="clean" 解释为单个字符串。如果将单个字符串放在测试语句中,则如果字符串为空则测试返回 false,如果字符串非空则返回 true。 $ARG=="clean" 永远不会为空。因此 [ $ARG=="clean"] 将始终返回 true。

其次,$ARG 应该被引用。否则,如果它为空,则该语句将简化为 `[ == "clean"],这是一个错误(“预期的一元运算符”)。

第三,最好为局部变量使用小写或混合大小写。系统使用大写 shell 变量,您不希望不小心覆盖其中之一。

最后,对于 [...],等于的 POSIX 运算符在字符串意义上是 =。 Bash 将接受 ==== 更具可移植性。

关于Bash if 语句不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31309126/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com