bash变量文件名,下划线无法识别?

时间:2016-03-09 23:40:34

标签: bash shell

我正在编写一个脚本,将所有与bash相关的dotfiles符号链接到主目录中。我希望脚本检查文件名是否已经存在,以便我可以重命名/移动它们。

出于某种原因,我的Map测试命令无法识别其中包含下划线的文件名。

测试已存在的文件时,此脚本:

if

输出:

#!/bin/bash
for name in bashrc bash_profile bash_aliases
do
  filename=$HOME"/."$name

  if [ -e "$filename" ]; then
    echo "${filename} exists"
  else
    echo "${filename} doesn't exist"
  fi
done

导致此行为的下划线是什么,以及如何解决?

1 个答案:

答案 0 :(得分:1)

代码在发布时是正确的,并且下划线通常不是有问题的字符。

您提到您正在对文件进行符号链接 - 如果您确定文件存在,请验证它们是否没有损坏符号链接。如果链接的最终目标不存在,-e file将为false。

可能导致此问题的其他因素包括:

  • 缺乏权限
  • 不可见的unicode字符,如零宽度空间
  • 类似外观的unicode字符,例如bаsh_profile,它有一个全宽低行而不是下划线。
  • 在chroot或sandbox中运行脚本
  • 检查文件是否存在于与用于运行脚本的终端不同的终端中 - 它可以被chroot,SSH到另一台机器或者在目录安装到目录之前启动,因此具有不同的视图fs