相关疑难解决方法(0)

在bash中将数组作为参数传递

如何将数组作为参数传递给bash函数?

注意:在Stack Overflow上没有找到答案后,我自己发布了一些粗略的解决方案.它只允许传递一个数组,它是参数列表的最后一个元素.实际上,它根本没有传递数组,而是传递了它的元素列表,这些元素通过called_function()重新组合成一个数组,但它对我有用.如果有人知道更好的方式,请随时在此处添加.

arrays bash

181
推荐指数
6
解决办法
16万
查看次数

$ {var}参数扩展表达式可以嵌套在bash中吗?

我有的是这个:

progname=${0%.*}
progname=${progname##*/}
Run Code Online (Sandbox Code Playgroud)

这可以嵌套(或不嵌套)成一行,即单个表达式吗?

我正在尝试从脚本名称中删除路径和扩展名,以便只保留基本名称.以上两行都运行正常.我的"C"性质只是让我更加混淆这些.

bash

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

如何将关联数组作为参数传递给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脚本

令我惊讶的是,我在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万
查看次数

如何分配按名称传递给函数的数组

我想创建一个迭代数组并插入给定值的函数(如果尚未包含它).我在我的代码的两个不同部分使用此函数,因此我必须使用不同的数组.因此我将数组名称传递给函数.现在我无法弄清楚如何分配数组的插槽来存储元素在这个地方.

这是我的代码:

name=("hello" "world")

function f {
    array_name=$2[@]
    array=("${!array_name}")
    length=${#array_name[@]}
    for (( i = 0; i <= $length; i++ )); do
        if [[ "${array[i]}" = "$1" ]];
            break;
        fi
        if [[ "$i" = "$length" ]]; then
            ${2[$length+1]=$1};
        fi
    done
}

f "test" "name"
Run Code Online (Sandbox Code Playgroud)

编辑:我希望数组附加给定的值,就像这样

for i in ${name[@]}
do
    echo $i
done
Run Code Online (Sandbox Code Playgroud)

会有这个输出:

hello
world
test
Run Code Online (Sandbox Code Playgroud)

但显然"${2[$length+1]=$1}"不起作用.

(传递数组的想法是从这里:bash如何将数组作为参数传递给函数)

arrays bash

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

获取数组 bash 的随机元素的函数

我知道如何从这样的数组中获取随机项:

declare -a ARRAYISO=(100 200 400 800)
echo ${ARRAYISO["$[RANDOM % ${#ARRAYISO[@]}]"]}
Run Code Online (Sandbox Code Playgroud)

显然,我可以像驴一样对每个数组执行此操作,但我想创建一个函数,它将数组作为参数并返回随机元素。

我正在尝试:

randArrayElement() {
    randElement=${$1["$[RANDOM % ${#$1[@]}]"]} 
    echo  $randElement
}
randArrayElement ARRAYISO
Run Code Online (Sandbox Code Playgroud)

但它不喜欢我的 $1...我尝试过 ", ', ` ,bash 不解释 $1 var...

arrays random bash

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

bash 如何切换传递给函数的初始参数

我想向 bash 中的函数发送多个参数。我怎样才能做到这一点,以便函数正确解析每个参数?

如果可能的话希望避免使用eval

这是我尝试使用的代码。

#!/bin/bash

arr_files=(
test_file
test_file1
test_file2
)

user=user10
group=user10

cp_chmod_chown(){
    # $1 = chmod value
    # $2 = chown value
    # $3 = array of files

    chmod_value=$1
    shift
    chown_value=$2
    shift
    arr=("$@")
 
    for i in "${arr[@]}"; do
        echo arr value: $i
    done
    echo chmod_value: $chmod_value
    echo chown_value: $chown_value

}

cp_chmod_chown "644" "$user:$group" "${arr_files[@]}"


Run Code Online (Sandbox Code Playgroud)

但是,我无法正确移出前两个参数,因此参数在数组中混杂在一起。这是运行上述脚本后的输出,您可以看到chown_value由于某种原因是数组中的第一个值:

# ./cp_arra_chmod_chown.sh

arr value: test_file
arr value: test_file1
arr value: test_file2
chmod_value: 644
chown_value: test_file

Run Code Online (Sandbox Code Playgroud)

我尝试将参数以不同的顺序放置,并使用引号和不使用引号,我尝试过的似乎都不起作用。如何将多个参数传递给函数?

arrays parameters bash function

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