我的if语句在switch语句中始终评估为false。我尝试使用布尔变量,现在只使用数字,得到的结果相同。 if语句不起作用。
#!/bin/bash
hidden=1
while true; do
read -sn 1 input
case $input in
q )
;;
n )
;;
h ) if ! [ $hidden ]; then # hide video
echo "hidden (false): $hidden"
hidden=1
else # show video
echo "hidden (true): $hidden"
hidden=0
fi
;;
'' ) ;;
\? );;
esac
done
exit 0
如果我运行它并按几次“ h”,我会得到..
hidden (true): 1
hidden (true): 0
hidden (true): 0
hidden (true): 0
为什么我的if语句总是评估为false?
答案 0 :(得分:2)
dependencies {
compile "io.micronaut.configuration:micronaut-kafka"
compile "io.micronaut.configuration:micronaut-hibernate-validator"
compile("io.micronaut.configuration:micronaut-hibernate-gorm") {
exclude group: 'org.grails', module: 'grails-datastore-gorm-hibernate5'
}
compile "org.grails:grails-datastore-gorm-hibernate5:6.1.9.RELEASE"
compile "io.micronaut:micronaut-http-client"
compile "io.micronaut:micronaut-http-server-netty"
compile "io.micronaut:micronaut-runtime-groovy"
compile "io.micronaut:micronaut-validation"
compileOnly "io.micronaut:micronaut-inject-groovy"
runtime "ch.qos.logback:logback-classic:1.2.3"
runtime "org.apache.tomcat:tomcat-jdbc"
runtime "mysql:mysql-connector-java:6.0.6"
testCompile "io.micronaut:micronaut-inject-groovy"
testCompile("org.spockframework:spock-core") {
exclude group: "org.codehaus.groovy", module: "groovy-all"
}
compile files('src/main/resources/libs/my-domain-lib.jar')
}
等效于[ $hidden ]
,并检查[ -n $hidden ]
是否扩展为非空字符串; $hidden
和0
都是非空字符串,且结果均为true,因此1
为false。
侧面说明:如果! [ $hidden ]
实际上是一个空字符串,则会出现语法错误;为了防止这种情况,请像这样引用:
$hidden
要执行我认为想要的操作,必须使用其他conditional construct:
if ! [ "$hidden" ]; then
这会在arithmetic context中计算if ! (( hidden )); then
;值hidden
被认为是假的,非零是真。在算术上下文中,可以跳过0
,因此可以跳过$
而不是hidden
。也不需要报价。注意$hidden
是Bash扩展;如果要在POSIX sh中使用相同的功能,则必须使用
(( ))