首页 > 解决方案 > 无法拆分存储在包含 $ 作为分隔符的变量中的字符串

问题描述

我正在尝试拆分此字符串并将子字符串存储在单独的变量中,如下所示:

temp="one$two$three$fourfive"
IFS="$" read var1 var2 var3 var4 <<< "$temp"

当我回显 var1 时,我得到“一”,但是当我回显 var2 时,没有输出。当我在每个 $ 符号之前添加一个 '\' 但当我尝试以编程方式执行它时,它会起作用:

echo "$temp" | sed 's/$/\\$/g'

Output: one\$

我怎样才能解决这个问题?

标签: bashshell

解决方案


您的问题在于带有双引号的原始字符串temp,其余的字符串被two解释为shell变量。threefourfive

在字符串上使用单引号temp将使变量不会被扩展为空字符串。

temp='one$two$three$fourfive'

还建议使用readwith -rflag 不要让反斜杠破坏你的字符串

IFS='$' read -r var1 var2 var3 var4 <<< "$temp"

推荐阅读