想象一下,我有这个名字的文件:
My crazy file's "quoting" problem!.txt
如果我使用TAB以交互方式使用bash,bash会为我引用该文件,如下所示:
My\ crazy\ file\'s\ \"quoting\"\ problem\!.txt
我的问题是,如果我在文本文件中有该文件名或保存在脚本内的变量中,是否有一个实用程序以相同的引用格式打印文件名?例如,如果我有一个带有一堆文件名的文本文件,并且我想以相同(或至少类似的功能)方式打印它们bash引号。
我意识到文件名可以用sed,regexp等进行按摩,但我希望避免考虑所有规则的工作。
答案 0 :(得分:4)
您可以使用printf
格式转换使用bash %q
执行此操作:
$ file='My crazy file'"'"'s "quoting" problem!.txt'
$ printf "%q\n" "$file"
My\ crazy\ file\'s\ \"quoting\"\ problem\!.txt
话虽如此,你不应该真的需要这样做,因为它在eval
中使用它会非常有用,你应该寻找替代方案。不过,如果你需要它,那就是它。
答案 1 :(得分:0)
我只能想到像
这样的东西echo $yourvariable | sed 's/\\//g' | sed 's/^/"/g' | sed 's/$/"/g'
您可以保存修改/增强此功能并保存在$ PATH中。然后你可以自由地访问这个你有那些不寻常的文件名/ string / etc;