[英]Split bash string by newline characters
我找到了這個。
我正在嘗試這個:
x='some
thing'
y=(${x//\n/})
我沒有運氣,我認為它可以使用雙反斜杠:
y=(${x//\\n/})
但它沒有。
為了測試我沒有得到我想要的我正在做的事情:
echo ${y[1]}
獲得:
some
thing
我想成為:
some
我希望y
是一個數組[some, thing]
。 我怎樣才能做到這一點?
其它的辦法:
x=$'Some\nstring'
readarray -t y <<<"$x"
或者,如果您沒有 bash 4,則 bash 3.2 相當於:
IFS=$'\n' read -rd '' -a y <<<"$x"
您也可以按照最初嘗試使用的方式進行操作:
y=(${x//$'\n'/ })
但是,如果您的字符串已經包含空格,例如'line 1\\nline 2'
,這將無法正常工作。 要使其工作,您需要在解析之前限制單詞分隔符:
IFS=$'\n' y=(${x//$'\n'/ })
...然后,由於您正在更改分隔符,您不再需要將\\n
轉換為space
,因此您可以將其簡化為:
IFS=$'\n' y=($x)
除非$x
包含匹配的通配符模式(例如“ *
”),否則此方法將起作用 - 在這種情況下,它將被匹配的文件名替換。 read
/ readarray
方法需要較新的 bash 版本,但適用於所有情況。
如果您想要的只是第一個換行的文本,還有另一種方法:
x='some
thing'
y=${x%$'\n'*}
之后y
將包含some
而沒有其他內容(沒有換行符)。
這里發生了什么?
我們對第一個ANSI C 換行符( $'\\n'
) 之前的最短匹配執行 參數擴展子字符串刪除( ${PARAMETER%PATTERN}
) 並刪除后面的所有內容 ( *
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.