我试图搜索如何在Bash函数中传递参数,但是出现的是如何从命令行传递参数.
我想在我的脚本中传递参数.我试过了:
myBackupFunction("..", "...", "xx")
function myBackupFunction($directory, $options, $rootPassword) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是语法不正确,如何将参数传递给我的函数?
我们知道,在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)
结果都不如我所愿.那么,有没有人知道如何正确地在函数之间传递数组?
如何将关联数组作为参数传递给函数?这在巴什有可能吗?
以下代码未按预期工作:
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) 在彻底搜索了一种在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.
令我惊讶的是,我在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) 假设我有以下2个数组.数组始终按字母顺序排序.
arr1=(a b c)
arr2=(a b c d)
Run Code Online (Sandbox Code Playgroud)
我必须比较这两个数组,如果它们完全相同,那么必须返回true.
只是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有关吗?我只能找到有关搜索和替换的信息.我没有看到任何可以返回和索引的东西.
我有这个脚本:
#!/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脚本,我无法弄清楚如何引用变量.任何帮助将不胜感激.
这段代码很完美:
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) 我需要能够备份并稍后使用(读取和打印以及作为参数传递给另一个命令)所有输入参数到 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)
示例运行和输出:
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
我的第一个方法是用 来支持论点 …