用bash的方式引用文件名?
假设我有一个文件名为:用bash的方式引用文件名?,bash,shell,Bash,Shell,假设我有一个文件名为: My crazy file's "quoting" problem!.txt 如果我以交互方式在bash中使用TAB,bash将为我引用文件,如下所示: My\ crazy\ file\'s\ \"quoting\"\ problem\!.txt 我的问题是,如果我将该文件名保存在文本文件中或保存在脚本中的变量中,是否有一个实用程序可以以相同的引用格式打印该文件名?例如,如果我有一个包含一堆文件名的文本文件,我想用bash引号中相同的(或至少在功能上类似的)方式打印它
My crazy file's "quoting" problem!.txt
如果我以交互方式在bash中使用TAB,bash将为我引用文件,如下所示:
My\ crazy\ file\'s\ \"quoting\"\ problem\!.txt
我的问题是,如果我将该文件名保存在文本文件中或保存在脚本中的变量中,是否有一个实用程序可以以相同的引用格式打印该文件名?例如,如果我有一个包含一堆文件名的文本文件,我想用bash引号中相同的(或至少在功能上类似的)方式打印它们
我意识到文件名可以通过sed、regexp等进行修改,但我希望避免想出所有规则
echo $yourvariable | sed 's/\\//g' | sed 's/^/"/g' | sed 's/$/"/g'
您可以保存、修改/增强此选项并保存在$PATH中。然后,您可以自由访问此文件,其中包含那些不寻常的文件名/字符串/等 我只能想到这样的事情
echo $yourvariable | sed 's/\\//g' | sed 's/^/"/g' | sed 's/$/"/g'
您可以保存、修改/增强此选项并保存在$PATH中。然后,您可以自由访问此文件,其中包含那些不寻常的文件名/字符串/等 您可以使用bash的
printf
使用%q
格式转换:
$ file='My crazy file'"'"'s "quoting" problem!.txt'
$ printf "%q\n" "$file"
My\ crazy\ file\'s\ \"quoting\"\ problem\!.txt
话虽如此,您不应该真的需要这样做,因为它在
eval
中非常有用,您可能应该寻找替代方法。但是,如果您需要它,它仍然存在。您可以使用bash的printf
使用%q
格式转换:
$ file='My crazy file'"'"'s "quoting" problem!.txt'
$ printf "%q\n" "$file"
My\ crazy\ file\'s\ \"quoting\"\ problem\!.txt
话虽如此,您不应该真的需要这样做,因为它在
eval
中非常有用,您可能应该寻找替代方法。不过,如果您需要它,它还是存在的。这有什么具体原因吗?有什么具体原因吗?或者echo$yourvariable | sed的/\\//g;y/^$/“/”
@Cyrus是的,我们可以(在严肃的脚本中)这样做。我只是想对这一步进行分解,以便读者能更详细地理解;y/^$/“/”@Cyrus是的,我们可以(在严肃的脚本中)这样做。我只是想分解这个步骤,让读者更加详细。