Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/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
String 在bash echo中*G*是什么意思?_String_Bash_Replace_Echo - Fatal编程技术网

String 在bash echo中*G*是什么意思?

String 在bash echo中*G*是什么意思?,string,bash,replace,echo,String,Bash,Replace,Echo,不太经常,但足够频繁地让我恼火,当我将字符串*G*放入变量并“回显”它时,我看到一些文件名,通常来自BASH指向的目录中的文本文件。我认为这可能是一个自动完成的功能,但在这些方面我找不到任何东西。有人能告诉我,当我回显一个包含这些字符组合的字符串时发生了什么吗?如果可能的话,我想“关掉它” 这是一个通配符文件名,*G*仅表示任意数量的字符(零个或更多),后跟G,后跟任意数量的字符 换句话说,任何包含G的文件名。如果没有包含G的文件,bash只会根据以下文本提供原始字符串: pax> mkd

不太经常,但足够频繁地让我恼火,当我将字符串
*G*
放入变量并“回显”它时,我看到一些文件名,通常来自BASH指向的目录中的文本文件。我认为这可能是一个自动完成的功能,但在这些方面我找不到任何东西。有人能告诉我,当我回显一个包含这些字符组合的字符串时发生了什么吗?如果可能的话,我想“关掉它”

这是一个通配符文件名,
*G*
仅表示任意数量的字符(零个或更多),后跟
G
,后跟任意数量的字符

换句话说,任何包含
G
的文件名。如果没有包含
G
的文件,
bash
只会根据以下文本提供原始字符串:

pax> mkdir qqq ; cd qqq ; touch paxfile

pax> ls -al
total 0
-rw-r--r-- 1 pax pax 0 Apr  3 10:05 paxfile

pax> echo *x*
paxfile

pax> echo *G*
*G*
您只需阻止shell扩展文件名即可将其关闭:

pax> echo '*x*'
*x*
或者,
bash
有一个
GLOBIGNORE
变量,该变量包含一个以冒号分隔的文件名列表,您不希望扩展这些文件名,因此您也可以使用它,尽管为任意目录设置它相当痛苦(是的,下面的方法不适用于带有嵌入空格的文件,因此,在您抱怨之前,它仅用于演示目的):


它是一个通配符文件名,
*G*
简单地表示任意数量的字符(零或更多),后跟
G
,后跟任意数量的字符

换句话说,任何包含
G
的文件名。如果没有包含
G
的文件,
bash
只会根据以下文本提供原始字符串:

pax> mkdir qqq ; cd qqq ; touch paxfile

pax> ls -al
total 0
-rw-r--r-- 1 pax pax 0 Apr  3 10:05 paxfile

pax> echo *x*
paxfile

pax> echo *G*
*G*
您只需阻止shell扩展文件名即可将其关闭:

pax> echo '*x*'
*x*
或者,
bash
有一个
GLOBIGNORE
变量,该变量包含一个以冒号分隔的文件名列表,您不希望扩展这些文件名,因此您也可以使用它,尽管为任意目录设置它相当痛苦(是的,下面的方法不适用于带有嵌入空格的文件,因此,在您抱怨之前,它仅用于演示目的):


这是一个通配符,将当前目录中的所有文件与其名称中的字符
G
进行匹配

这在本书的第二章中有解释

如果确实要禁用它,可以使用:

set -f

如前所述

但这是一个非常有用的特性,我鼓励您保持启用状态并学习使用它

如果要在单个命令中禁用它,可以使用引号或反斜杠转义任何特殊字符:

echo '*G*'
echo "*G*"
echo \*G\*
顺便说一句,此功能并不特定于
echo
命令;它适用于shell中的所有命令。例如:

ls *.txt

为您提供名称以
.txt

结尾的所有文件的目录列表。这是一个通配符,将当前目录中的所有文件与其名称中的字符
G
匹配

这在本书的第二章中有解释

如果确实要禁用它,可以使用:

set -f

如前所述

但这是一个非常有用的特性,我鼓励您保持启用状态并学习使用它

如果要在单个命令中禁用它,可以使用引号或反斜杠转义任何特殊字符:

echo '*G*'
echo "*G*"
echo \*G\*
顺便说一句,此功能并不特定于
echo
命令;它适用于shell中的所有命令。例如:

ls *.txt

为您提供一个目录列表,其中列出了名称以
.txt

*
结尾的所有文件,这些文件在全局搜索时包含0个或多个字符。
*
在全局搜索时包含0个或多个字符。当然,单引号可以获得纯文本。我自己应该想到这一点。感谢paxdiablo、Keith Thompson和alex。感谢Pumbaa80 f或者在我的OQ.BZT上做编辑当然,单引号来获得纯文本。我应该自己想到这一点。感谢paxdiablo、Keith Thompson和alex。感谢Pumbaa80在我的OQ.BZTKeith上做编辑-我不认为我会“参与”noglob选项。我经常在ls和其他命令中使用星号和字符串。我会坚持使用单引号或反斜杠方法。BZT@SilversleevesX:只是好奇:如果你一直在使用通配符,你怎么会不知道
*G*
是什么意思呢?基思-我不认为我会“参与”noglob选项。我经常在ls和其他命令中使用星号和字符串。我会坚持使用单引号或反斜杠方法。BZT@SilversleevesX:只是好奇:如果你一直在使用通配符,你怎么不知道
*G*
是什么意思?