Bash中如何将数组元素加引号并无尾空格输出?
问题
现有Bash数组arr1=("a" "b" "c" "d" "e" "f"),需要输出格式为AA_ENABLE_HOOKS=("a" "b" "c" "d" "e" "f")。之前用printf生成带引号的元素时,末尾会多出一个空格,目前靠sed去除尾空格临时解决,想知道有没有更直接的替代实现方式。
替代实现方法
分阶段printf输出
先打印开头和第一个元素,再对剩余元素统一添加前缀空格和引号,最后补全结尾部分,从根源避免尾空格:printf 'AA_ENABLE_HOOKS=("%s"' "${arr1[0]}" printf '" "%s"' "${arr1[@]:1}" printf '")\n'先构建带引号的数组再拼接
先遍历原数组,给每个元素加上双引号存入新数组,再用空格连接新数组元素并组合成目标格式:quoted_elements=() for item in "${arr1[@]}"; do quoted_elements+=("\"$item\"") done echo "AA_ENABLE_HOOKS=( ${quoted_elements[*]} )"注:
${quoted_elements[*]}会用默认空格连接数组元素,不会产生尾空格。利用IFS参数扩展拼接
通过临时修改IFS的值,让数组元素直接按" "的格式拼接,再嵌入到目标输出模板中:printf 'AA_ENABLE_HOOKS=( "%s" )\n' "$(IFS='" "'; echo "${arr1[*]}")"
内容的提问来源于stack exchange,提问作者Kalib Zen
相关产品推荐
相关产品推荐

