Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用bash的方式引用文件名?_Bash_Shell - Fatal编程技术网

用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是的,我们可以(在严肃的脚本中)这样做。我只是想分解这个步骤,让读者更加详细。