我有这样的事情:
declare -a DISPLAYS
AUXILIAR="$(xrandr | grep " connected ")"
IFS=$'\n' read -ra DISPLAYS <<< "$AUXILIAR"
为什么不能检测到换行符
echo "$AUXILIAR"
打印多行?
更新
这项工作表明:
AUXILIAR="$(xrandr | grep " connected " | tr '\n' '%')"
IFS='%' read -ra DISPLAYS <<< $(echo $AUXILIAR)
我仍然想知道为什么它没有拆分为折线。
默认情况下,一次read
将仅读取一行。例如,在这里我们提供3线输入,正如你所看到的,read
只读取第一行:
$ IFS=$'\n' read -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a")'
该-d
选项可用于更改此行为。例如:
$ IFS=$'\n' read -d '' -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")
在这里,-d ''
被使用。这告诉read
阅读,直到找到一个NUL字符为止。由于bash字符串中永远不会存在NUL字符,因此这会导致它读取我们提供给here字符串的所有输入。
$ IFS=% read -ra displays <<< 'a%b%c'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")'
使用%
作品是因为read
继续阅读过去%
。默认情况下,它仅对换行符停止。
对于变量,请使用小写或大小写混合的名称,这是最佳做法。系统使用大写名称,并且您不希望意外覆盖其中之一。例如,DISPLAY
是一个系统变量,如果覆盖它,可能会出现许多不愉快的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句