如何在bash脚本中将字符串转换为数组?

Jes*_*Jes 2 command-line bash scripts

我正在尝试将字符串转换为数组并循环该数组以将每个值作为参数传递给 bash 命令。当我执行脚本时,我收到了错误的替换消息。

text = 'xdc','cde','erd','ded','ded','kie';
OIFS=$IFS;
IFS=',';
ids=$($text);
for (i=0; i<${#ids[@]}; ++i);
do
echo "$i"
done
IFS=$OIFS
Run Code Online (Sandbox Code Playgroud)

这是我编写的脚本,还有如何将索引值作为参数传递给 for 循环内的命令。

ste*_*ver 6

首先,您需要从字符串变量的赋值周围删除文本:

text="'xdc','cde','erd','ded','ded','kie';"
Run Code Online (Sandbox Code Playgroud)

然后你可以只使用 bashread命令的数组形式:

IFS=, read -a ids <<< "${text%;}"
Run Code Online (Sandbox Code Playgroud)

其中${text%;}替换删除了尾随的分号。请注意,这样,IFS 不会在read命令之外修改,因此无需保存和恢复它。


你的 C 风格的 for 循环语法几乎是正确的,除了在 bash 中,循环需要双括号,例如

for ((i=0; i<${#ids[@]}; ++i)); do printf '%s\n' "${ids[i]}"; done
Run Code Online (Sandbox Code Playgroud)

或者,您可以直接使用循环遍历数组成员for ... in

for i in "${ids[@]}"; do printf '%s\n' "$i"; done
Run Code Online (Sandbox Code Playgroud)