我希望附加一个bash数组的每个元素index.js
,除了最后一个。
var container = CloudKit.getDefaultContainer();
var database = container.publicCloudDatabase; // We'll only make calls to the public database.
// Sign in using the keyID and public key file.
container.setUpAuth().then(function (userInfo) {
println("userInfo", userInfo);
return database.performQuery({ recordType: 'Test' });
}).then(function (response) {
println("Queried Records", response.records);
}).catch(function (error) {
console.warn(error);
});
我想要的输出是
|
我做了什么
array=("element1" "element2" "element3")
其次是
array=("element1"|"element2"|"element3")
我是否可以使用任何其他循环方法,只将该字符附加到最后一个但只有一个元素?
答案 0 :(得分:2)
您可以使用:
# append | all except last element
read -ra array < <( printf "%s|" "${array[@]:0:$((${#array[@]} - 1))}"; echo "${array[@]: -1}"; )
# Check array content now
declare -p array
declare -a array='([0]="element1|element2|element3")'
"${array[@]:0:$((${#array[@]} - 1))}"
将获得除数组"${array[@]: -1}"
将获取数组的最后一个元素printf "%s|"
会在所有参数|
< <(...)
是进程替换以从stdin read -ra
将读取数组中的输入答案 1 :(得分:2)
对于您的特殊情况,每个阵列成员之间只需要插入一个字符,最简单的解决方案可能是使用数组扩展(并更改分隔根据您的需要事先预测角色IFS
:
$ array=("element1" "element2" "element3")
$ array=( $( IFS="|" ; echo "${array[*]}") )
$ echo "\$array[0] is '${array[0]}'"
$array[0] is 'element1|element2|element3'
答案 2 :(得分:1)
$ array=("element1" "element2" "element3")
$ printf -v str "|%s" "${array[@]}"
$ array=("${str:1}")
$ declare -p array
declare -a array='([0]="element1|element2|element3")'
printf
语句创建一个包含str
的字符串|element1|element2|element3
,即比我们想要的更多|
(在开头)。
下一个语句使用子字符串参数扩展${str:1}
来跳过第一个字符并重新分配给array
,现在它由一个元素组成。
答案 3 :(得分:1)
一个简单的解决方案(如果你不介意改变IFS)是:
$ array=("element1" "element2" "element3")
$ IFS="|"; printf "%s\n" "${array[*]}"
重新分配给变量数组(不改变IFS):
$ array=("$(IFS="|"; printf "%s\n" "${array[*]}")")
$ printf '%s\n' "${array[@]}"
element1|element2|element3
另一种解决方案是:
$ array=($(printf '%s|' "${array[@]}")); array="${array%?}"
$ printf '%s\n' "${array}"
更复杂的解决方案(脚本)是:
array=("element1" "element2" "element3")
delimiter='|'
unset newarr
for val in "${array[@]}"
do newarr=$newarr${newarr+"$delimiter"}$val
done
array=("$newarr")
echo "array=($array)"