linux - 反引号用于文件名时的奇怪行为

标签 linux

假设我有 file0、file1 file2。

当我使用反引号循环将文件 (0-2) 复制到 ./output/目录时,出现如下奇怪的结果。

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'

当我执行 echo $idx 时,没问题。但只有当我使用 $idx 作为文件名时,它才会发生。

最佳答案

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

for idx in file*
do
  cp file0 "./output/$idx"
done
ls output

但是屏蔽可能包含空格等的文件名总是一个好主意。这些当然对复制没有用,但仍然是有效的文件名字符,其中只有 '/' 作为 dirs 和 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"

看到一些不同的颜色。

关于linux - 反引号用于文件名时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49825063/

相关文章:

linux - 在 Azure VM (Linux) 上设置 SSL

linux - 权限被拒绝 : '/var/lib/pgadmin/sessions' in Docker

linux - 如何永久添加环境变量?

c++ - 这个 valgrind 错误是什么意思?

ajax - 任何脚本语言都可以读取 AJAX/Java 脚本吗? (Linux)

linux - 使用 "grep"和 "find"命令根据访问时间查找文件

linux - 关于 Pascal 输出的一些茫然

xml - Linux - bash脚本从文件中删除同一行之前的每一行

linux - 你如何使用 gitg 推送代码?

linux - 从多个子目录中删除文件,但在每个子目录中保留 3 个最新文件