在shell脚本中,如何使用变量安全地更改当前目录?
下面的shell脚本将当前目录更改为桌面在shell脚本中,如何使用变量安全地更改当前目录?,shell,command-line,cd,Shell,Command Line,Cd,下面的shell脚本将当前目录更改为桌面 v=~/Desktop/ cd $v pwd # desktop 以下脚本将当前目录更改为主目录,而不是生成错误 cd $undefined_variable pwd # home directory echo $? # 0 如果我为新的当前目录拼写了一个变量,恐怕脚本会删除重要文件 通常,如何使用shell脚本中的变量安全地更改当前目录?您可以使用test-d条件检查指定的变量是否为目录,即 if [[ -d $undefined_variable
v=~/Desktop/
cd $v
pwd # desktop
以下脚本将当前目录更改为主目录,而不是生成错误
cd $undefined_variable
pwd # home directory
echo $? # 0
如果我为新的当前目录拼写了一个变量,恐怕脚本会删除重要文件
通常,如何使用shell脚本中的变量安全地更改当前目录?您可以使用test-d条件检查指定的变量是否为目录,即
if [[ -d $undefined_variable ]]
then
cd $undefined_variable
echo "This will not be printed if $undefined_variable is not defined"
fi
有关更多测试选项,请参见…您可以使用test-d条件检查指定变量是否为目录,即
if [[ -d $undefined_variable ]]
then
cd $undefined_variable
echo "This will not be printed if $undefined_variable is not defined"
fi
有关更多测试选项,请参见…是的,这是shell
如果您键入不带参数的cd,它将跳转到home dir。
您可以在执行cd命令之前检查null或empty变量
仅当targetDir不为空时才调用check like cd:
test -z "$targetDir" || cd $targetDir
仅当targetDir确实存在时才调用check like cd:
test -d "$targetDir" && cd $targetDir
注意:谢谢-1,也应该读最后一句。所以我添加了真正的答案。是的,这就是shell
如果您键入不带参数的cd,它将跳转到home dir。
您可以在执行cd命令之前检查null或empty变量
仅当targetDir不为空时才调用check like cd:
test -z "$targetDir" || cd $targetDir
仅当targetDir确实存在时才调用check like cd:
test -d "$targetDir" && cd $targetDir
注意:谢谢-1,也应该读最后一句。因此,我添加了真正的答案。每次展开未定义变量时,您可以设置-u使bash退出并出现错误。每次展开未定义变量时,您可以设置-u使bash退出并出现错误。Bourne shell有一个构造来替换未定义变量的值${varname subtitution}。在变量未定义的情况下,您可以使用它来拥有一个安全的回退目录:
cd "${undefined-/tmp/backupdir}"
如果存在名为undefined的变量,则替换其值,否则替换/tmp/backupdir
注意,我还将变量展开放在双引号中。这用于防止在包含Windows目录中非常常见的空格的字符串上拆分单词。这样,它甚至适用于带有空格的目录
有关所有shell替换构造的详细信息,POSIX shell还有七个,请阅读shell手册的参数替换部分。Bourne shell有一个构造,用于替换未定义变量的值${varname subtitution}。在变量未定义的情况下,您可以使用它来拥有一个安全的回退目录:
cd "${undefined-/tmp/backupdir}"
如果存在名为undefined的变量,则替换其值,否则替换/tmp/backupdir
注意,我还将变量展开放在双引号中。这用于防止在包含Windows目录中非常常见的空格的字符串上拆分单词。这样,它甚至适用于带有空格的目录
有关所有shell替换构造的详细信息,POSIX shell还有七个,请阅读shell手册的参数替换部分。使用:
cd${变量:?}
如果$variable未定义或为空,则bash将抛出一个错误并退出。它类似于set-u选项,但不是文件的全局选项。使用:
cd${变量:?}
如果$variable未定义或为空,则bash将抛出一个错误并退出。它类似于set-u选项,但不是文件的全局选项。您必须在bash中编写一个包装器:
cd() {
if [ $# -ne 1 ] ;then
echo "cd need exactly 1 argument" >&2
return 2
fi
builtin cd "$1"
}
您必须在bash中编写此工作的包装器:
cd() {
if [ $# -ne 1 ] ;then
echo "cd need exactly 1 argument" >&2
return 2
fi
builtin cd "$1"
}
您还可以提供错误消息:${variable:?variable is unset或empty}您还可以提供错误消息:${variable:?variable is unset或empty}其他答案也很好,但set-u是最简单的解决方案。谢谢其他答案也很好,但set-u是最简单的解决方案。谢谢谢谢你提供有用的信息!我不知道有一个很酷的特性,比如参数替换。我应该学习更多的shell脚本。感谢提供有用的信息!我不知道有一个很酷的特性,比如参数替换。我应该学习更多的shell脚本。