Bash IFS忽略字符串的一部分

Bash IFS忽略字符串的一部分,bash,Bash,我将从bash运行的ssh命令的输出存储在一个变量中,我试图解析它并使用IFS获取最后一个值,但它一直忽略来自Qt-app的部分。 以下是我所做的: #!/bin/bash results=$(ssh remote 'dbus-send --system --print-reply --type=method_call --dest=com.something.SomeApp /SomeApp com.something.SomeApp.status' 2>&1) echo $re

我将从bash运行的ssh命令的输出存储在一个变量中,我试图解析它并使用IFS获取最后一个值,但它一直忽略来自Qt-app的部分。 以下是我所做的:

#!/bin/bash
results=$(ssh remote 'dbus-send --system --print-reply --type=method_call --dest=com.something.SomeApp /SomeApp com.something.SomeApp.status' 2>&1)
echo $results
IFS=$' ' # space is set as delimiter
read -ra ADDR <<< "$results" # results are read into an array as tokens separated by IFS
for i in "${ADDR[@]}"; do # access each element of array
    printf '%s\n' "$i"
done
它不见了:
字符串
“空闲”

如果复制终端中得到的输出,将其粘贴到bash脚本中,并在其上运行IFS,如下所示:

#!/bin/bash
manual="method return time=1570703114.770058 sender=:1.13063 -> destination=:1.13859 serial=4306 reply_serial=2 string "Idle""
IFS=$' ' # space is set as delimiter
read -ra ADDR <<< "$manual"
for i in "${ADDR[@]}"; do
    printf '%s\n' "$i"
done
#/bin/bash
手动=“方法返回时间=1570703114.770058发送方=:1.13063->目的地=:1.13859串行=4306应答\u串行=2字符串“空闲”
IFS=$''空格设置为分隔符

read-ra ADDR您能
printf'%q\n'$results'
查看它是否使用制表符或其他外来分隔符吗?无论如何,您可以尝试默认的
IFS=$'\t\n'
.results=$(ssh remote'dbus send--system--print reply--type=method\u call--dest=com.something.SomeApp/SomeApp.com.something.SomeApp.status'2>&1 | xargs)感谢@LéaGris和@Šerg对您的帮助。使用@LéaGris advice,我可以验证是否存在特殊的
\n
新行字符:
…reply\u serial=2\n字符串“Idle”
。使用@Šerg建议,我得到了数组中的整个字符串,这正是我想要的。现在我只想知道为什么这个
| xargs
可以工作,但我想这是谷歌可以为我做的工作。你能
打印“%q\n'$results”
看看它是否使用了制表符或其他外来分隔符吗?无论如何,您可以尝试默认的
IFS=$'\t\n'
.results=$(ssh remote'dbus send--system--print reply--type=method\u call--dest=com.something.SomeApp/SomeApp.com.something.SomeApp.status'2>&1 | xargs)感谢@LéaGris和@Šerg对您的帮助。使用@LéaGris advice,我可以验证是否存在特殊的
\n
新行字符:
…reply\u serial=2\n字符串“Idle”
。使用@Šerg建议,我得到了数组中的整个字符串,这正是我想要的。现在我只想知道为什么这个
|xargs
可以工作,但我想这是谷歌可以为我做的工作。
#!/bin/bash
manual="method return time=1570703114.770058 sender=:1.13063 -> destination=:1.13859 serial=4306 reply_serial=2 string "Idle""
IFS=$' ' # space is set as delimiter
read -ra ADDR <<< "$manual"
for i in "${ADDR[@]}"; do
    printf '%s\n' "$i"
done