Linux 反勾号用作文件名时的奇怪行为

Linux 反勾号用作文件名时的奇怪行为,linux,Linux,假设我有文件0,文件1,文件2 当我使用backtick将文件(0-2)复制到带有循环的./output/dir中时,我得到了如下奇怪的结果 for idx in `ls file*` do cp file0 ./output/$idx done ls output '$'\033'[00mfile1'$'\033'[0m''''$'\033'[0m'$'\033'[00mfile0'$'\033'[0m' '$'\033'[00mfile2'$'\033'[0m' 当我回显$idx时,这

假设我有文件0,文件1,文件2

当我使用backtick将文件(0-2)复制到带有循环的./output/dir中时,我得到了如下奇怪的结果

for idx in `ls file*`
 do
 cp file0 ./output/$idx
done
ls output
'$'\033'[00mfile1'$'\033'[0m''''$'\033'[0m'$'\033'[00mfile0'$'\033'[0m' '$'\033'[00mfile2'$'\033'[0m'


当我回显$idx时,这是可以的。但只有当我使用$idx作为文件名时,才会发生这种情况。

根本不需要执行命令替换:

for idx in file*
do
  cp file0 "./output/$idx"
done
ls output
但是屏蔽文件名(可能包含空格等)始终是一个好主意。这些文件名当然不适用于复制但仍然有效的文件名字符,其中只有“/”作为dir和dir之间的分隔符,以及文件名和二进制零“\0”作为名称末尾标记,是无效的(但通常需要屏蔽才能在文件名中使用不寻常的字符)

你的产出

''$'\033''[00mfile1'$'\033''[0m'
''$'\033''[0m'$'\033''[00mfile0'$'\033''[0m' 
''$'\033''[00mfile2'$'\033''[0m'
包含控制序列,通常用于更改终端中字符的颜色

试一试

查看一些不同的颜色。

。而不是可能的重复
echo -e "\033[34mfile1 \033[33mfile0 \033[0m \033[43mfile2 \033[0m"