gpt4 book ai didi

bash - 意外的 if 语句行为

转载 作者:行者123 更新时间:2023-11-29 09:40:00 25 4
gpt4 key购买 nike

我正在运行一个小的 bash 脚本,但我无法弄清楚为什么即使条件应该为假,它也会进入 if block 。

$ cat script.sh 
#!/bin/bash

if [[ "$@"="-h" || "$@"="--help" ]]
then
echo 'Show help'
exit
fi

echo 'Do stuff'
$ ./script.sh
Show help
$ bash -x script.sh
+ [[ -n =-h ]]
+ echo 'Show help'
Show help
+ exit
$ bash -x script.sh -option
+ [[ -n -option=-h ]]
+ echo 'Show help'
Show help
+ exit

那么当我没有传递任何参数时,为什么 $@ 等于 -n?同样,即使是,-n =-h 如何评估为真?当我确实传递参数 -option 时,为什么它也被评估为 true?

最佳答案

空格很重要。 [[ 的参数之间必须有空格。

if [[ "$@" = "-h" || "$@" = "--help" ]]

此外,"$@" 表示“所有命令行参数”。最好只检查一个参数。

if [[ "$1" = "-h" || "$1" = "--help" ]]

就其值(value)而言,[[ 中的变量扩展不必被引用。这没有坏处,引用变量实际上是养成的好习惯,但如果您愿意,可以删除引号。

if [[ $1 = -h || $1 = --help ]]

关于bash - 意外的 if 语句行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810248/

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