cd /tmp
if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
echo "YES"
else
echo "NO"
fi
cd -
是的,打印如下:
YES
/tmp
但我只想
YES
答案1
打印路径的是cd -
最后的命令。它打印路径,以便您可以看到最终进入的工作目录。这是cd
使用操作数(单个破折号)调用时的特殊行为-
,在这种情况下它相当于
cd "$OLDPWD" && pwd
为了避免这种情况,您可以使用cd "$OLDPWD"
(OLDPWD
是一个特殊变量,它将保存前一个工作目录的值),但请注意,如果cd /tmp
失败的并且您的代码输出NO
,然后两者cd -
和cd "$OLDPWD"
可能会将您带到意外的目录。
相反,使用
(
cd /tmp
if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then
echo YES
else
echo NO
fi
)
第一个cd
不会影响(...)
子 shell 之外的工作目录。
此外,您的测试将更安全、更高效地执行
if [[ $PWD == */tmp ]]; then
echo YES
else
echo NO
fi
该PWD
变量将包含当前工作目录的路径名,并且通常是您想要使用的而不是命令的变量pwd
。该测试只是测试当前工作目录的路径名是否以 string 结尾/tmp
,这awk
也是您的代码似乎想要执行的操作(但如果路径名包含换行符,则将失败)。
如果您只想检查是否可以cd
进入/tmp
,但实际上不这样做,请使用
( if cd /tmp; then echo YES; else echo NO; fi )
在具有外部cd
实用程序的系统(例如 macOS 和 Solaris)上,您可以像这样使用它:
if /usr/bin/cd /tmp; then
echo YES
else
echo NO
fi
外部cd
实用程序实际上永远不能用于更改工作目录,但它在诸如确定是否更改为特定目录的测试中仍然有用将是可能的。也可以看看“cd”外部命令有什么意义?
如果您想要做的是测试是否/tmp
存在并且是一个目录(或目录的符号链接),那么最常见的方法不是使用cd
而是使用如下测试:
if [ -d /tmp ]; then
echo YES
else
echo NO
fi