shell中的使用map

定义

shell中map必须申明才能使用

1
declare -A userIds

初始化

1
2
3
4
5
# 方式一,item项目中间不需要逗号
userIds=(['bar']="1" ['foo']="2")
# 方式二
userIds['bar']="1"
userIds['foo']="2"

输出

1
2
3
4
5
6
7
8
9
10
# 输出value
echo "${userIds[*]}"
# 或者
echo "${userIds[@]}"
# 1 2
# 输出key
echo "${!userIds[*]}"
# 或者
echo "${!userIds[@]}"
# bar foo

循环

1
2
3
4
5
6
7
8
9
# 输出key
for key in "${!userIds[@]}"; do
echo $key
echo ${userIds[$key]}
done
# 输出value
for value in "${userIds[@]}"; do
echo $value
done

@换成*效果一样

在shell中执行一个字符串

写shell脚本时经常会拼接一个字串,然后当成命令执行,用到的linux命令是eval ${str}或者echo ${str} | sh,例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env bash

start=1
amount=$1
raceId=$2
api_host=127.0.0.1:8080
str="curl --location --request POST 'http://${api_host}/api/AddBuy'
--header \"'Content-Type':'application/json'\"
--data-raw '{
\"PidStart\":$start,
\"Amount\":${amount},
\"RaceId\":${raceId}
}'"

echo ${str} | sh
# 或者
eval ${str}