In Bash, the .* pattern is often considered harmful when used to match dot files (files that start with a . character). This is because the .* pattern will match not only dot files, but also any other files or directories in the current directory.
For example, if you have the following files in a directory:
.bash_profile .bashrc .gitignore README.md
And you use the .* pattern to try to match the dot files, like this:
for file in .*; do echo "$file" done
This will output the following:
. .. .bash_profile .bashrc .gitignore
As you can see, the .* pattern has matched not only the dot files, but also the . and .. entries, which are the current and parent directories, respectively. This can cause problems if you are trying to operate on only the dot files, as the . and .. entries will be included in the list of matched files.
To avoid this issue, it is recommended to use a more specific pattern when trying to match dot files in Bash. For example, you can use the .??* pattern, which will match only files and directories that start with a . character and have at least two more characters. This will exclude the . and .. entries, while still matching the dot files that you are interested in.
for file in .??*; do echo "$file" done
This will output the following:
.bash_profile .bashrc .gitignore
Using a more specific pattern like .??* can help avoid unintended consequences when trying to match dot files in Bash.