我想在终端中执行一些命令。我在Swift 3.0中创建它们并将它们写入命令文件。但是一些特殊字符会产生问题,例如单引号:
mv 'Don't do it.txt' 'Don_t do it.txt'
我使用单引号来涵盖其他特殊字符。但是单引号本身是什么呢?如何以一种可以正确处理每个可能的文件名的方式转换它们?
答案 0 :(得分:1)
你的问题很奇怪:
在这种情况下,我们将写入shell脚本而不是文本文件
您正在替换输出文件名中的单引号,但不替换空格, 哪个应该被替换
这是一个解决方案,可以正确地转义输入文件 替换(读取:空格)输出文件:
#!/usr/bin/awk -f
BEGIN {
mi = "\47"
no = "[^[:alnum:]%+,./:=@_-]"
print "#!/bin/sh"
while (++os < ARGC) {
pa = split(ARGV[os], qu, mi)
printf "mv "
for (ro in qu) {
printf "%s", match(qu[ro], no) ? mi qu[ro] mi : qu[ro]
if (ro < pa) printf "\\" mi
}
gsub(no, "_", ARGV[os])
print FS ARGV[os]
}
}
结果:
#!/bin/sh
mv 'dont do it!.txt' dont_do_it_.txt
mv Don\''t do it.txt' Don_t_do_it.txt
mv dont-do-it.txt dont-do-it.txt