使用“read”读取变量并保留用户输入的反斜杠

使用“read”读取变量并保留用户输入的反斜杠

我用来read从用户那里读取路径,如下所示:

read -p "Input the file name: " FilePath

用户现在输入此字符串:

\Supernova\projects\ui\nebula

我可以做什么来\替换/.我想要的结果是:

/Supernova/projects/ui/nebula 

顺便说一句,命令:

echo $FilePath

输出结果:

Supernovaprojectsuinebula

我不知道有什么问题。

答案1

问题在于read将其输入中的反斜杠视为转义运算符(在使用时转义分隔符read word1 word2和换行符以允许行继续)。

要执行您想要的操作,您需要添加开关-rread告诉它不要进行反斜杠处理,并且您还需要设置$IFS为空字符串,以便它将整行视为整个单词来分配给变量:

IFS= read -rp "Input file name: " FilePath
UnixPath="${FilePath//\\//}"

此外,您的echo命令变量替换需要双引号: echo "$FilePath",无论如何总的来说echo不能用于输出任意数据²,所以:

printf '%s\n' "$FilePath"

1 使用默认值$IFS,以防止从输入行中去除前导和尾随空白(空格和制表符)

² 同样echo,反斜杠也可以被特殊处理,甚至取决于bash环境或它的构建方式。

相关内容