我需要在linux bash中创建一个脚本,在某些时候用户可以输入目录的路径。为此,我应该使用read -p
命令。然后我应该检查目录是否存在。我的代码可以正常工作,直到用户尝试输入~/path
。代码无法将符号〜识别为主目录。有什么建议吗?
read -p "Please, enter the destination: "
if [ -d "$REPLY" ]; then
echo "Directory exists!"
fi
答案 0 :(得分:4)
您必须自己将~
替换为"$HOME"
。还有其他类型的波浪扩展,您通常使用较少,例如~user
来获取用户的homedir而不是您自己的。假设你只关心第一种情况,那么参数扩展就可以了
read -ep 'Please, enter the destination: ' dir
dir=${dir/#~/$HOME}
if [[ -d $dir ]]; then
printf 'Good job, the directory exists!\n'
fi
您可能会注意到我在读取命令中添加了-e。这使得read使用readline库来读取目录。这意味着用户可以使用制表符完成。
有关bash中字符串操作的更多信息,请参阅BashFAQ 100。
答案 1 :(得分:1)
一般情况下,除了直接在shell提示符下,你应该避免(并鼓励人们避免)使用~
扩展。
如果你做必须处理它并希望支持所有各种扩展bash代码扩展,那么你可以使用类似我的tildeExpand.sh脚本。