按bash的方式引用文件名?

时间:2015-02-10 05:28:55

标签: bash shell

想象一下,我有这个名字的文件:

My crazy file's "quoting" problem!.txt

如果我使用TAB以交互方式使用bash,bash会为我引用该文件,如下所示:

My\ crazy\ file\'s\ \"quoting\"\ problem\!.txt

我的问题是,如果我在文本文件中有该文件名或保存在脚本内的变量中,是否有一个实用程序以相同的引用格式打印文件名?例如,如果我有一个带有一堆文件名的文本文件,并且我想以相同(或至少类似的功能)方式打印它们bash引号。

我意识到文件名可以用sed,regexp等进行按摩,但我希望避免考虑所有规则的工作。

2 个答案:

答案 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;