在For循环In Bash中用数组元素中的空格替换换行符



我正在为for循环中的数组赋值:

aws_user_roles+=("$aws_role_name")

如果我从命令中分配数组的值,并想去掉换行符,我可以去:

readarray -t aws_roles < <(...some aws commands...)

我的for循环看起来像这样:

for ((has_role_index=0;has_role_index<${#aws_user_has_roles[@]};++has_role_index)); do         
aws_user_roles+=("$aws_role_name")
declare -p aws_user_roles
done

如何从aws_user_roles中的数组元素中去掉换行符并将其替换为空格?

使用tr:

aws_user_roles+=("$(<<<"$aws_role_name" tr 'n' ' ')")
  • $(..)是命令替换
  • <<<"$variable"是here字符串
  • tr 'n' ' '用换行符代替空格

使用模式替换:

aws_user_roles+=("${aws_role_name//$'n'/ }")

来自man bash:

${parameter/pattern/string}

图案替换。模式被扩展以产生一个模式,就像在路径名扩展中一样。参数被展开,模式与其值的最长匹配将被字符串替换。如果模式以/开头,则所有匹配的模式都将替换为字符串。通常只有第一场比赛被替换

最新更新