相关疑难解决方法(0)

将参数传递给Bash函数

我试图搜索如何在Bash函数中传递参数,但是出现的是如何从命令行传递参数.

我想在我的脚本中传递参数.我试过了:

myBackupFunction("..", "...", "xx")

function myBackupFunction($directory, $options, $rootPassword) {
     ...
}
Run Code Online (Sandbox Code Playgroud)

但是语法不正确,如何将参数传递给我的函数?

bash

900
推荐指数
7
解决办法
98万
查看次数

如何将数组作为参数传递给Bash中的函数

我们知道,在bash编程中,传递参数的方式是$1...... , $N. 但是,我发现将数组作为参数传递给接收多个参数的函数并不容易.这是一个例子:

f(){
 x=($1)
 y=$2

 for i in "${x[@]}"
 do
  echo $i
 done
 ....
}

a=("jfaldsj jflajds" "LAST")
b=NOEFLDJF

f "${a[@]}" $b
f "${a[*]}" $b
Run Code Online (Sandbox Code Playgroud)

如上所述,函数f接收两个参数:第一个分配给x一个数组,第二个分配给y.

f可以通过两种方式调用.第一种方法使用"${a[@]}"第一个参数,结果是:

jfaldsj 
jflajds
Run Code Online (Sandbox Code Playgroud)

第二种方式使用"${a[*]}"第一个参数,结果是:

jfaldsj 
jflajds 
LAST
Run Code Online (Sandbox Code Playgroud)

结果都不如我所愿.那么,有没有人知道如何正确地在函数之间传递数组?

arrays bash shell

43
推荐指数
3
解决办法
7万
查看次数

如何将关联数组作为参数传递给Bash中的函数?

如何将关联数组作为参数传递给函数?这在巴什有可能吗?

以下代码未按预期工作:

function iterateArray
{
    local ADATA="${@}"            # associative array

for key in "${!ADATA[@]}"
do
    echo "key - ${key}"
    echo "value: ${ADATA[$key]}"

done

}
Run Code Online (Sandbox Code Playgroud)

将关联数组传递给像普通数组这样的函数不起作用:

iterateArray "$A_DATA"
Run Code Online (Sandbox Code Playgroud)

要么

iterateArray "$A_DATA[@]"
Run Code Online (Sandbox Code Playgroud)

arrays bash associative-array associative

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

在bash 3中创建关联数组

在彻底搜索了一种在bash中创建关联数组的方法后,我发现它declare -A array可以解决这个问题.但问题是,它仅适用于bash版本4,服务器在我们系统中的bash版本是3.2.16.

如何在bash 3中实现某种类似关联数组的hack?这些值将传递给类似的脚本

ARG=array[key];

./script.sh ${ARG}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道我可以在awk或其他工具中执行此操作,但我正在尝试解决的方案需要严格的bash.

bash

29
推荐指数
3
解决办法
3万
查看次数

如何将数组参数传递给Bash脚本

令我惊讶的是,我在1小时后找不到答案.我想将一个数组传递给我的脚本,如下所示:

test.sh argument1 array argument2
Run Code Online (Sandbox Code Playgroud)

我不想把它放在另一个bash脚本中,如下所示:

array=(a b c)
for i in "${array[@]}"
do
  test.sh argument1 $i argument2
done
Run Code Online (Sandbox Code Playgroud)

arrays bash arguments

29
推荐指数
3
解决办法
5万
查看次数

比较两个排序的数组

假设我有以下2个数组.数组始终按字母顺序排序.

arr1=(a b c)
arr2=(a b c d)
Run Code Online (Sandbox Code Playgroud)

我必须比较这两个数组,如果它们完全相同,那么必须返回true.

arrays bash

6
推荐指数
2
解决办法
9263
查看次数

在bash中搜索数组返回索引

只是pesuocode,但这基本上是我想做的.

Array=("1" "Linux" "Test system"
       "2" "Windows" "Workstation"
       "3" "Windows" "Workstation")


echo "number " ${array[search "$1"]} "is a" ${array[search "$1" +1]} ${array[search "$1" +2])}
Run Code Online (Sandbox Code Playgroud)

这可能与bash有关吗?我只能找到有关搜索和替换的信息.我没有看到任何可以返回和索引的东西.

arrays syntax bash

4
推荐指数
1
解决办法
1万
查看次数

循环名称参考

我有这个脚本:

#!/bin/bash

function contains() {
  local -n array=$1
  local value=$2
  for item in "${array[@]}"; do
    [ "$item" = "$value" ] && return 0
  done
  return 1
}

array=(a "b c" "d")
value="b c"

contains array value
Run Code Online (Sandbox Code Playgroud)

运行它我收到此错误:

***: line 6: warning: array: circular name reference
Run Code Online (Sandbox Code Playgroud)

这是什么意思?如何解决这个问题?

bash

3
推荐指数
1
解决办法
847
查看次数

如何将数组传递给Bash函数?

我有一个Bash脚本,我无法弄清楚如何引用变量.任何帮助将不胜感激.

这段代码很完美:

myfunction() {
    for i in "${BASE_ARRAY[@]}"
    do
Run Code Online (Sandbox Code Playgroud)

我想将我的数组的名称作为变量传递给函数,以便我可以将其与其他数组一起使用.这是我尝试失败的代码:

myfunction() {
    for i in "${$1[@]}"
    do
Run Code Online (Sandbox Code Playgroud)

然后我将以下内容传递给函数:

myfunction BASE_ARRAY
Run Code Online (Sandbox Code Playgroud)

arrays bash quotes function

3
推荐指数
2
解决办法
2831
查看次数

如何在 bash 中创建和使用所有输入参数(“$@”)的备份副本?

我需要能够备份并稍后使用(读取和打印以及作为参数传递给另一个命令)所有输入参数到 bash 程序,但无法弄清楚。这是我的尝试:

back_up_all_input_args.sh:

#!/usr/bin/env bash

all_args1="$@"
all_args2="$(printf "%q " "$@")"

# Simulate parsing the input args here
# - see: https://stackoverflow.com/a/14203146/4561887
shift # remove 1st arg
shift # remove 2nd arg

echo "$@"
echo "$all_args1"
echo "$all_args2"

# Do another program call with all input args here
# rg "$all_args1"  # FAILS
# rg "$all_args2"  # FAILS
Run Code Online (Sandbox Code Playgroud)

示例运行和输出:

$ ./backup_all_input_args.sh arg1 "arg 2" "arg 3"
arg 3
arg1 arg 2 arg 3
arg1 arg\ 2 arg\ 3 
Run Code Online (Sandbox Code Playgroud)

我的第一个方法是用 来支持论点 …

bash shell parsing arguments

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