我用来read
从用户那里读取路径,如下所示:
read -p "Input the file name: " FilePath
用户现在输入此字符串:
\Supernova\projects\ui\nebula
我可以做什么来\
替换/
.我想要的结果是:
/Supernova/projects/ui/nebula
顺便说一句,命令:
echo $FilePath
输出结果:
Supernovaprojectsuinebula
我不知道有什么问题。
答案1
问题在于read
将其输入中的反斜杠视为转义运算符(在使用时转义分隔符read word1 word2
和换行符以允许行继续)。
要执行您想要的操作,您需要添加开关-r
,read
告诉它不要进行反斜杠处理,并且您还需要设置$IFS
为空字符串,以便它将整行视为整个单词来分配给变量:
IFS= read -rp "Input file name: " FilePath
UnixPath="${FilePath//\\//}"
此外,您的echo
命令变量替换需要双引号: echo "$FilePath"
,无论如何总的来说echo
不能用于输出任意数据²,所以:
printf '%s\n' "$FilePath"
1 使用默认值$IFS
,以防止从输入行中去除前导和尾随空白(空格和制表符)
² 同样echo
,反斜杠也可以被特殊处理,甚至取决于bash
环境或它的构建方式。