2

我有一个字符串数组(可变大小......),如下所示:

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)!

4

2 回答 2

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[@]}"
于 2013-09-04T18:56:38.280 回答
0

有点hacky,但你可以试试这个:

arr=( "one str" "another str" "example" "last-string" )
intermediate_result=`printf " %s:%%s" "${arr[@]}"`
printf "$intermediate_result" "${arr[@]}"
于 2021-09-13T16:04:22.007 回答