假设我有 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/