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

printfこれは、bash の組み込み関数では実行できません。ループまたは外部プログラム (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 に答える