我有一个字符串数组(可变大小......),如下所示:
arr=( "one str" "another str" "example" "last-string" )
我需要以下输出:
one str:one str another str:another str example:example last-string:last-string
问题在于,当我做类似的事情时:
$(printf " %s:%s" "${arr[@]}")
迭代数组,移动到字符串的下一个位置(不重复!),结果如下:
one str:another str example:last-string
我如何用printf实现这个目标?没有任何循环!
如果有帮助,我在Cygwin中使用bash 3.1.0(1)!
答案 0 :(得分:1)
使用bash的内置printf
功能无法做到这一点。您需要使用循环或外部程序,例如的Python:
# With a loop:
for x in "${arr[@]}"; do
printf " %s:%s" "$x" "$x"
done
# With Python
python -c 'import sys; print "".join(" %s:%s" % (arg, arg) for arg in sys.argv[1:])' "${arr[@]}"