代码改变世界

shell编程技巧——${1-}的意义是啥?

2025-08-05 10:55  潇湘隐者  阅读(171)  评论(0)    收藏  举报

在shell脚本中,如果看到${1-}或"${1-}"这样的写法(变量),你知道它的具体意义吗?

if [ -z "${1-}" ] ; then
    .....#省略部分代码
fi

其实${1}表示脚本第一个参数的值,而在Shell 脚本中,${1-}是一种参数扩展(Parameter Expansion)的语法,用于提供默认值。
具体来说,${1-} 的含义是:

  • 如果位置参数 $1 有值,则使用 $1 的值。
  • 如果位置参数 $1 没有值(即未设置或为空),则使用默认值(默认值为空字符串)。

在Shell(如 Bash、Zsh 等)中,参数扩展(Parameter Expansion) 是一种对变量进行处理和转换的机制,允许在引用变量
时对其值进行修改、判断或提取。它是 Shell 脚本中非常强大的功能,常用于处理字符串、设置默认值、检查变量状态等。

其中一种是设置默认值(变量未定义或为空时),当变量未设置(未定义)或值为空时,使用指定的默认值。

${var-word}

作用:仅当var未设置(未定义)时,扩展为word,若var已设置(即使值为空),则扩展为var的值(空)。
如下测试所示:

$ more test.sh 
#!/bin/bash

if [ -z $1 ] ;then
   echo ${1-"kerry"}
else
   echo $1
fi
$ sh test.sh 
kerry
$ sh test.sh kkk
kkk