这行“BUILD_TARGET = $ {1:-none}”在shell脚本中意味着什么?

时间:2016-07-08 07:16:32

标签: bash shell cygwin

我刚刚开始学习shell脚本,所以请原谅我,如果这是太基本无法在这里问。我想运行这个sh脚本 (https://github.com/daid/Cura/blob/SteamEngine/package.sh)。 但是我不明白这一行( BUILD_TARGET = $ {1:-none} )是做什么的?

以下是摘录:

#!/usr/bin/env bash

set -e
set -u

# This script is to package the Cura package for Windows/Linux and Mac OS X
# This script should run under Linux and Mac OS X, as well as Windows with Cygwin.

#############################
# CONFIGURATION
#############################

##Select the build target
BUILD_TARGET=${1:-none}
#BUILD_TARGET=win32
#BUILD_TARGET=darwin
#BUILD_TARGET=debian_i386
#BUILD_TARGET=debian_amd64
#BUILD_TARGET=debian_armhf
#BUILD_TARGET=freebsd

##Do we need to create the final archive
ARCHIVE_FOR_DISTRIBUTION=1
##Which version name are we appending to the final archive
export BUILD_NAME=15.04.6
TARGET_DIR=Cura-${BUILD_NAME}-${BUILD_TARGET}

##Which versions of external programs to use
WIN_PORTABLE_PY_VERSION=2.7.2.1

当我试图通过在Cygwin中运行来查看它是如何工作时,它会抛出以下错误,

$ bash package.sh
package.sh: line 2: $'\r': command not found
: invalid option 3: set: -
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
: invalid option 4: set: -
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
package.sh: line 5: $'\r': command not found
package.sh: line 8: $'\r': command not found
package.sh: line 12: $'\r': command not found
package.sh: line 21: $'\r': command not found
package.sh: line 27: $'\r': command not found
package.sh: line 30: $'\r': command not found
package.sh: line 48: syntax error near unexpected token `$'{\r''
'ackage.sh: line 48: `{

我在Cygwin中缺少什么?

更新1 :我通过将行结尾转换为与unix兼容的行来解决'未找到命令'。可在此处找到更多内容,'\r': command not found - .bashrc / .bash_profile

1 个答案:

答案 0 :(得分:4)

$1是第一个命令行参数

${1:-none}表示第一个命令行参数未设置或为空," "替换。
否则,替换第一个命令行参数的值。

有关详情,请查看[ shell parameter expansion ]