Bash for循环仅返回最后一个元素,如何输出所有元素并拼接字符串?
问题分析与解决方案
问题根源
- 循环里每次给
uniqueletters赋值都会覆盖之前的内容,所以最后只留下了最后一个参数CHINESE的结果 - 你写的
awk -v RS= '{$1=$1}1' | sed 's/ //g'完全没用:因为"${@:2}"里的每个参数本身就没有空格,这个处理不会改变任何内容
修复后的脚本
直接把第2个及以后的参数拼接起来就行,不需要多余的文本处理:
#!/bin/bash uniqueletters="" for i in "${@:2}"; do uniqueletters+="$i" done echo "$uniqueletters"
更简洁的写法
用Bash的参数扩展特性,一行就能搞定:
#!/bin/bash printf "%s" "${@:2}" echo
或者用管道处理(会多启动一个进程,效率稍低):
#!/bin/bash echo "${*:2}" | tr -d ' '
测试结果
传入参数 7216859340 FRENCH ARABIC CHINESE 时,上面的脚本都会输出:
FRENCHARABICCHINESE
内容的提问来源于stack exchange,提问作者GJO2
相关产品推荐
相关产品推荐

