Shell Script Tilde扩展

这是我的脚本:

#!/bin/bash echo "Digite o local em que deseja instalar o IGRAFU(pressione enter para instalar em ${HOME}/IGRAFO):" read caminho if test -z $caminho then caminho="${HOME}/IGRAFO" fi echo "O IGRAFU será instalado no diretório: $caminho" mkdir -pv $caminho mv -v ./* $caminho echo "Pronto!" 

在'阅读caminho'我可能会从用户接收像〜/ somefolderpath。 当脚本接收到这种types的path时,mv和mkdir都不会进行代字符扩展,所以它会尝试创build〜/ somefolder而不是/ home / username / somefolder,因此会失败。

我如何确保代字号将被转换为HOMEvariables?

Solutions Collecting From Web of "Shell Script Tilde扩展"

您可能需要评估该变量是否正确替换。 一个例子就是简单地做

 caminho=`eval "echo $caminho"` 

请记住,如果caminho包含分号或引号,它会将反斜线视为转义,如果数据不可信,则需要注意,您不是注射攻击的目标。

希望有所帮助。

引用和扩展总是很棘手,特别是在bash中。 如果你自己的主目录足够好,这个代码工作(我测试过):

 if test -z $caminho then caminho="${HOME}/IGRAFO" else case "$caminho" in '~') caminho="$HOME" ;; '~'/*) caminho="$HOME/${caminho#'~/'}" ;; '~'*) echo "Case of '$caminho' is not implemented" 1>&2 ;; esac fi 

也许用/home/${USER}替代你的高级用户级目录,如果不是/home