我正在尝试检查用户指定的输入中是否存在目录。我尝试使用
test -d <path_to_dir>
,然后使用 $? -eq 1
检查命令是否成功。但这似乎并没有达到预期的效果。
问题是,第一次输入有效路径时,我得到了错误的路径输出。如果我第二次重新输入相同的有效路径,它就会通过。
为什么会发生这种情况?我缺少什么?如果这不是一个好的实践,我如何使用类似的东西来实现这一点?
这是我的代码:
read -p "Specify the path under which folder(s) need to be created: " var_dir_path
test -d var_dir_path
while [[ $? -eq 1 ]]; do
read -p "Path specified is incorrect or directory does not exist. Try again: " var_dir_path
test -d $var_dir_path
done
我尝试通过添加 echo $? 进行调试在第一个测试命令之后,如下所示
read -p "Specify the path under which folder(s) need to be created: " var_dir_path
test -d var_dir_path
echo $?
while [[ $? -eq 1 ]]; do
read -p "Path specified is incorrect or directory does not exist. Try again: " var_dir_path
test -d $var_dir_path
done
令我惊讶的是,
echo $?
返回 1,即使路径是存在的有效目录。我不确定为什么会发生这种情况。
您在第一次测试中缺少变量引用中的
$
。这是测试是否存在名为“var_dir_path”的目录:
test -d var_dir_path
这是更正后的版本:
read -p "Specify the path under which folder(s) need to be created: " var_dir_path
test -d var_dir_path
while [[ $? -eq 1 ]]; do
read -p "Path specified is incorrect or directory does not exist. Try again: " var_dir_path
test -d $var_dir_path
done