我如何知道Bash中是否设置了变量?
例如,如何检查用户是否将第一个参数提供给函数?
function a {
    # if $1 is set ?
}
最近在一次代码审查中,一位同事声称该[[ ]]构造比[ ]在类似的构造中更受欢迎
if [ "`id -nu`" = "$someuser" ] ; then 
     echo "I love you madly, $someuser"
fi
他无法提供理由.有吗?
我查看了bash手册页,并[[说它使用条件表达式.然后我查看了Conditional Expressions部分,它列出了与test(和[)相同的运算符.
所以我想知道,Bash [和[[Bash 之间的区别是什么?
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL 
[ $? -eq 2 ]
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
如果是这样,为什么?
我有dockerfile
FROM centos:7
ENV foo=42
然后我建立它
docker build -t my_docker .
并运行它.
docker run -it -d  my_docker
是否可以从命令行传递参数并在Dockerfile中使用if else?我的意思是
FROM centos:7
if (my_arg==42)
     {ENV=TRUE}
else:
     {ENV=FALSE}
并使用此参数构建.
 docker build -t my_docker . --my_arg=42
我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到一个奇怪的(至少对我而言)[ -n arg ]测试行为.对于以下脚本:
#!/bin/bash
if [ -n $1 ]; then
    echo "The 1st argument is of NON ZERO length"
fi
if [ -z $1 ]; then
    echo "The 1st argument is of ZERO length"
fi
我得到的结果如下:
没有参数:
xylodev@ubuntu:~$ ./my-bash-script.sh
The 1st argument is of NON ZERO length
The 1st argument is of ZERO length
带参数:
xylodev@ubuntu:~$ ./my-bash-script.sh foobar
The 1st argument is of NON ZERO length
我已经发现$1用双引号括起来给我的结果符合预期,但我仍然想知道为什么当没有使用引号并且没有参数调用脚本时,两个测试都返回true?它似乎$1是null然后,所以[ -n $1 ] …
我需要更新用于git的bash函数:
push() {
  a=$1
  if [ $# -eq 0 ]
    then
      a=$(timestamp)
  fi
  # ... do stuff
}
但我不知道这条线是如何工作的
 if [ $# -eq 0 ]
我需要检查第一个参数,然后再检查第二个参数。
因此,将有2个if语句。
我该如何更新以及该行如何工作
 if [ $# -eq 0 ]
我创建了一个脚本,以便在运行该脚本时使用参数。如何检查是否没有提供参数?如果没有参数通过,它必须显示打印帮助。
while test -n "$1"; do
         case "$1" in
            -help|-h)
            print_help
            exit $ST_UK
            ;;
        --version|-v)
            print_version $PROGNAME $VERSION
            exit $ST_UK
            ;;
        --activeusers|-a)
            opt_var=$2
            au
            shift;;
        --dailyusers|-d)
            opt_var1=$2
            dau
            shift;;
        *)
    echo "Unknown argument: $1"
        print_help
        exit $ST_UK
        ;;
    esac
    shift
done
我想检查OSX上bash脚本上输入参数的存在性。我做:
if [-z "$1"]
我得到:
/usr/local/bin/deploy.sh: line 8: [-z: command not found
有小费吗?
谢谢。
我想检测是否传递了无参数或无效参数并打印帮助消息。一个空的参数单独检查是可能的,但不是那么优雅。
我的 bash 脚本如下所示:
COMMAND="$1"
shift
case "$COMMAND" in     
        loop)
            loop_
            ;;  
        ...            
        *)
            echo $"Usage: $0 {loop|...}"
            exit 1 
esac
当没有参数传递时,什么都不执行;如果我通过“”,则会触发正确的情况。如果我$1直接使用而不是使用临时变量,那么它会按预期工作。
我什至尝试添加一个特定的案例,"")但无济于事。