【发布时间】:2019-06-03 07:28:08
【问题描述】:
我有一个这样的 bash 脚本:
#!/bin/bash
params="path=/me & you/folder/file.json&&user=Bob"
splitParams=(${params//&&/ })
for i in "${!splitParams[@]}"
do
echo "$i: ${splitParams[i]}"
done
它产生:
0: path=/me
1: &
2: you/folder/file.json
3: user=Bob
但是当我在 shell 中输入 em 时:
➜ params="path=/me & you/folder/file.json&&user=Bob"
➜ splitParams=(${params//&&/ })
➜ echo $splitParams
path=/me & you/folder/file.json user=Bob
我希望脚本的输出就像我在 shell 中键入时一样:
0: path=/me & you/folder/file.json
1: user=Bob
【问题讨论】:
-
splitParams=(${params//&&/ })行首先将所有&&替换为一个空格,然后将每个空格处的字符串标记/拆分为一个数组。在脚本和命令行中都会发生同样的情况。直接打印这个数组(就像你在命令行上做的那样)将在一行上用一个空格连接所有元素。当然,循环遍历数组(就像在脚本中所做的那样)会将每个元素打印在单独的行上。 -
脚本的循环可以像这样在命令行中输入:
for i in "${!splitParams[@]}"; do echo "$i: ${splitParams[$i]}"; done。对了,脚本有错误,应该是"$i: ${splitParams[$i]}"而不是"$i: ${splitParams[i]}"。
标签: string bash split ampersand