相关疑难解决方法(0)

访问函数内Bash脚本的参数

在函数内部,$1 ... $n是传递给该函数的参数.函数外部是$1 ... $n传递给脚本的参数.

我可以以某种方式访问​​传递给函数内部脚本的参数吗?

bash

27
推荐指数
5
解决办法
2万
查看次数

bash字符串引用了多字args到数组

问题:

在bash脚本编写中,将包含多个单词的文字引号的字符串转换为具有相同解析参数结果的数组的最佳方法是什么?

争议:

存在许多问题,都是采用规避策略来避免问题而不是寻找解决方案,这个问题提出了以下论点,并希望鼓励读者关注论点,如果你愿意接受它,就要参与挑战,找到最佳选择.解.

提出的论点:

  1. 虽然有许多情况应该避免这种模式,因为存在更适合的替代解决方案,但作者认为仍然存在有效的用例.这个问题将尝试产生一个这样的用例,但不要仅仅认为它是可以想象的场景,它可能出现在现实世界的情况中.
  2. 您必须找到满足要求的最佳解决方案.该用例是专门针对其实际应用而选择的.您可能不同意所做出的决定,但并不负责仅提供解决方案的意见.
  3. 在不修改输入或选择运输的情况下满足要求.两者都是通过现实场景特别选择来捍卫这些部分不受你控制的叙述.
  4. 特定问题没有答案,这个问题旨在解决这个问题.如果您倾向于避免这种模式,那么只需避免这个问题,但如果您认为自己已经接受了挑战,那么请看看您将如何解决问题.

有效用例:

转换当前正在使用的现有脚本,以通过命名管道或类似流接收参数.为了最大限度地减少对开发人员控制之外的无数脚本的影响,决定不更改接口.现有脚本必须能够像以前一样通过新流实现传递相同的参数.

现有实施:

$ ./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变量填充为数组.

string2array工作台脚本:

#!/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)

arrays string bash arguments argument-passing

7
推荐指数
1
解决办法
2509
查看次数

bash数组 - $ {#array_name [*]}和$ {#array_name [@]}之间的区别是什么

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)

两者都给出了数组元素的数量.那两者有什么区别?

arrays bash

0
推荐指数
1
解决办法
1115
查看次数

标签 统计

bash ×3

arrays ×2

argument-passing ×1

arguments ×1

string ×1