如何將 bash 陣列更改為具有此模式的字串?假設我有arr=(a b c d)并且我想更改為這種模式
'a' 'b' 'c' 'd',中間有空格。
PS-我想出了這種模式'a' 'b' 'c' 'd',但不確定如何放置" "而不是" "介于兩者之間。
uj5u.com熱心網友回復:
在bash不求助于外部命令且不創建子shell的情況下,使用帶有選項的bash內置printf隱式回圈-v(將輸出分配給變數而不是列印它):
printf -v str " '%s'" "${arr[@]}"
str=${str:3} # to strip off leading ' '
echo "$str"
這也適用于包含空白字符的陣列元素(嘗試使用arr=(a b c d "x y"))。此解決方案假定arr不是空陣列。
uj5u.com熱心網友回復:
像這樣:
#!/bin/bash
arr=(a b c d)
str="${arr[@]}"
str=${str// / } # Parameter Expansion
sed "s/[a-z]/'&'/g" <<< "$str"
輸出
'a' 'b' 'c' 'd'
查看
請參閱: http: //mywiki.wooledge.org/BashFAQ/073和 man bash 中的“引數擴展”。另請參閱http://wiki.bash-hackers.org/syntax/pe。
uj5u.com熱心網友回復:
這是純 Bash 中的一個版本,它也允許arr成員中的空格。
arr=(a b c d 'e f' 'g h')
aux=("${arr[@]/#/ \'}") # add prefix " '"
aux=("${aux[@]/%/\' }") # add suffix "' "
str="$(IFS= # join with " "
printf '%s' "${aux[*]}")"
str="${str:1:${#str} - 2}" # trim spaces
printf '%s\n' "$str"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520798.html
標籤:数组重击
