test -L命令在终端与脚本中执行返回不同错误码排查
问题分析与解决
你的脚本存在核心错误,导致结果不符合预期:
循环变量未正确引用
脚本里的test -L d是直接使用了字面量字符串d,而非循环变量$d。这意味着每次循环都在检查当前目录下是否存在名为d的软链接,而非遍历到的目标路径,所以每次都会返回1。正确写法需要引用变量:
test -L "$d"
另外还有一个可选优化点:for d in */会让变量d的取值带有末尾斜杠(比如_myOrg/、xxx/),虽然test -L可以识别带斜杠的软链接路径,但如果想要更严谨,也可以用参数展开去掉斜杠:test -L "${d%/}"
修改后的完整脚本:
#!/bin/zsh pushd "$tyc" > /dev/null for d in */ ; do if test -L "$d" then echo 0 else echo 1 fi done popd > /dev/null
执行这个脚本就能得到你预期的0和1结果。
内容的提问来源于stack exchange,提问作者user1146081
相关产品推荐
相关产品推荐

