如何在 ${@:3} shell 脚本之后接受参数

Dha*_*hta 3 bash shell

我在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} 呢?那么参数可以被读取吗?

F. *_*uri 5

命令行:

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