在函数内部,$1 ... $n是传递给该函数的参数.函数外部是$1 ... $n传递给脚本的参数.
我可以以某种方式访问传递给函数内部脚本的参数吗?
在bash脚本编写中,将包含多个单词的文字引号的字符串转换为具有相同解析参数结果的数组的最佳方法是什么?
存在许多问题,都是采用规避策略来避免问题而不是寻找解决方案,这个问题提出了以下论点,并希望鼓励读者关注论点,如果你愿意接受它,就要参与挑战,找到最佳选择.解.
转换当前正在使用的现有脚本,以通过命名管道或类似流接收参数.为了最大限度地减少对开发人员控制之外的无数脚本的影响,决定不更改接口.现有脚本必须能够像以前一样通过新流实现传递相同的参数.
$ ./string2array arg1 arg2 arg3
args=(
[0]="arg1"
[1]="arg2"
[2]="arg3"
)
Run Code Online (Sandbox Code Playgroud)
$ echo "arg1 arg2 arg3" | ./string2array
args=(
[0]="arg1"
[1]="arg2"
[2]="arg3"
)
Run Code Online (Sandbox Code Playgroud)
正如Bash和Double-Quotes所指出的那样,传递给argv的文字引号不会像预期的那样被解析.
此工作台脚本可用于测试各种解决方案,它处理传输并制定可测量的响应.建议您专注于使用字符串作为参数获取的解决方案脚本,并且应该将$ args变量填充为数组.
#!/usr/bin/env bash
#string2arry
args=()
function inspect() {
local inspct=$(declare -p args)
inspct=${inspct//\[/\\n\\t[}; inspct=${inspct//\'/}; inspct="${inspct:0:-1}\n)"
echo -e ${inspct#*-a }
}
while read -r; do
# source the solution to turn $REPLY in $args array
source $1 "${REPLY}" …Run Code Online (Sandbox Code Playgroud) bash-3.00$ cat arr.bash
#!/bin/bash
declare -a myarray
myarray[2]="two"
myarray[5]="five"
echo ${#myarray[*]}
echo ${#myarray[@]}
bash-3.00$ ./arr.bash
2
2
Run Code Online (Sandbox Code Playgroud)
两者都给出了数组元素的数量.那两者有什么区别?