我在shell脚本中指定了变量,如下所示
USERNAME="$1"
PASSWORD="$2"
DATA="${@:3}"
DATAVERSION="$4"
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时,是这样的:
./abc.sh "name" "password" csv V1
Run Code Online (Sandbox Code Playgroud)
但是,当这里 csv 和 V1 被视为第三个参数而不是将 V1 视为第四个参数时,因为我需要 ${@:3} 。
那么如何在将参数传递给脚本时结束这个 ${@:3} 呢?那么参数可以被读取吗?
bash 最强大的功能之一是:您可以尝试在脚本的每个部分附近内联。
要尝试围绕参数解析:只需打开任何终端窗口并尝试:
set -- "Full Name" "password" csv V1
Run Code Online (Sandbox Code Playgroud)
从那里,您处于与使用以下参数运行的脚本(几乎)相同的条件:myscript "Full Name" "password" csv V1。所以你可以:
echo $1
Full Name
echo ${@:3}
csv V1
echo ${@:0:3}
/bin/bash Full Name password
echo ${@:1:3}
Full Name password csv
Run Code Online (Sandbox Code Playgroud)
所以
userName=$1
passWord=$2
datas=${*:3}
dataVersion=$4
printf '%-12s <%s>\n' userName "$userName" passWord "$passWord" \
datas "$datas" dataVersion "$dataVersion"
Run Code Online (Sandbox Code Playgroud)
必须产生:
userName <Full Name>
passWord <password>
datas <csv V1>
dataVersion <V1>
Run Code Online (Sandbox Code Playgroud)
shift或者 ...
set -- "Full Name" "password" csv V1
Run Code Online (Sandbox Code Playgroud)
然后
userName=$1
shift
passWord=$1
shift
datas=$*
shift
dataVersion=$1
printf '%-12s <%s>\n' userName "$userName" passWord "$passWord" \
datas "$datas" dataVersion "$dataVersion"
Run Code Online (Sandbox Code Playgroud)
将产生:
userName <Full Name>
passWord <password>
datas <csv V1>
dataVersion <V1>
Run Code Online (Sandbox Code Playgroud)
关于Tripleee关于大写变量名的评论,我更喜欢使用lowerCamelCase。