BASH printf数组,带有字段分隔符和最后一个条目的换行符

时间:2014-10-10 16:47:44

标签: bash printf

如何在BASH中打印出一个数组,并在每个值和最后一个换行符之间使用字段分隔符。

单个printf最接近的是printf '%s|' "${arr1[@]}"其中|是字段分隔符。这个问题是最后没有换行符。 \ n我尝试放入其中的任何组合要么在每个条目上放置一个换行符,要么根本没有放入换行符!

有没有办法在一行上完成,或者我需要使用printf '%s|' "${arr1[@]}";printf "\n"

谢谢,

杰兰特

2 个答案:

答案 0 :(得分:8)

是的,你需要两个命令。 printf '%s|' "${array[@]}"; echo完全是传统的。

或者,如果您不想要跟踪|,则可以暂时修改IFS以使用所选分隔符作为其第一个字符,并使用"${array[*]}"

IFS="|$IFS"; printf '%s\n' "${array[*]}"; IFS="${IFS:1}"

答案 1 :(得分:2)

如果您不希望打印let permissions = ["public_profile", "email", "user_friends"] PFFacebookUtils.logInInBackground(withReadPermissions: permissions) { (user : PFUser?, error: Error?) in ,您也可以将其删除,只需放入一个空间或您想要使用的任何分隔符(例如,或 - ):

|

如果您经常需要这个,你应该使用一个函数,因为反复编写相同的代码并不是最好的方法:

printf '%s ' "${arr1[@]}" ; printf '\n'

用法:

print_array ()
{
  # run through array and print each entry:
  local array
  array=("$@")
  for i in "${array[@]}" ; do
      printf '%s ' "$i"
  done
  # print a new line
  printf '\n'
}

示例:

print_array "${array_name[@]}"

输出:

array01=(one two three)
print_array "${array01[@]}"
echo "this should be a new line"