首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在bash手册中,“扩展是在命令行被拆分成单词之后执行的”,这是什么意思?

在bash手册中,“扩展是在命令行被拆分成单词之后执行的”,这是什么意思?
EN

Stack Overflow用户
提问于 2016-08-25 09:37:43
回答 2查看 94关注 0票数 2

我正在读关于“扩展”的巴什手册,它说它有7种类型的扩展/替代,包括“分词”。另一方面,它在该项目的开头说:

扩展是在命令行被拆分成单词之后执行的。

我不明白什么是“分词”。换句话说,我不明白“分词”和“分词算作扩展”之间的区别。

请让我知道什么是“扩展执行后,命令行已被分割成文字”。意思是。

这是否意味着,假设

代码语言:javascript
运行
复制
$> var1="word splitting"
$> var2="single_word"
$> command var1 var2

“扩展是在命令行拆分成单词之后执行的。”->解析单词。

代码语言:javascript
运行
复制
word1 = command
word2 = var1
word3 = var2

“分词”->用定界符指定位置参数

代码语言:javascript
运行
复制
$1 = "word"
$2 = "splitting"
$3 = "single_word"

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-25 14:32:46

当bash手册声明如下:

扩展是在命令行被拆分成单词之后执行的。

这意味着命令行从一个字符串开始,然后从左到右在元字符上拆分该字符串:

元字符 不加引号的字符,当没有引文时,将单词分开。下列之一: @&;()<>空格标签

这种分裂的结果被称为“单词”或“记号”。

它应用于整个命令行字符串。

相反,所谓的“分词”仅适用于“未引号扩展”的结果,并且只使用$IFS中的字符进行拆分。

因此,此命令行只打印两行:

代码语言:javascript
运行
复制
$ a="word splitting"  b="single_word"

$ printf '%s\n' "$a" "$b"
word splitting
single_word

命令行:printf '%s\n' "$a" "$b"被空格划分为四个标记(words):

一:printf,二:'%s\n'三:"$a",四:"$b"

如果没有引用相同的命令行:

代码语言:javascript
运行
复制
$ printf '%s\n' $a $b
word
splitting
single_word

然后,第三个令牌( word ):word splitting受单词拆分的限制,成为两个令牌(单词):wordsplitting (因为IFS默认包含一个空格)。

第四个令牌也受分词(因为它没有引号),但仍然作为一个令牌( word ),因为它没有IFS字符。

请注意,“分词”通常与全局关联,因为两者都适用于未引号的扩展。set -f命令可以关闭Globing,使用引用可以避免分字。

票数 1
EN

Stack Overflow用户

发布于 2016-08-25 10:06:59

这里有些人比我更了解巴什,但我会试一试。

正如您所引用的,手册描述了在完成任何其他操作之前,命令会被拆分成单词。编辑:(谢谢)指出,命令行的解析规则与扩展后的单词拆分不同。在其他区别中,不参考IFS变量,而是用空格或特殊字符分隔单词(空格是制表符或空格)。有关示例,请参见下面的注释。

然后执行所有其他扩展。然后,

shell扫描参数展开、命令替换和算术扩展的结果。为了分词。

本质上,它将其他扩展的结果作为一个新的命令行来处理,只有少数例外。

代码语言:javascript
运行
复制
$> command $var1 $var2

(注意,在使用时必须在变量名前加上美元符号),这是由于参数展开:

代码语言:javascript
运行
复制
command word splitting single_word

(一个字符串、字母和空格)。这个字符串(整行)再次被分割成明显的单词。第一个词通常被解释为一个命令,其他的则成为命令的位置参数。command将把1美元视为word,2美元视为拆分,3美元视为single_word。

因此,分词两次,以不同的方式执行:一次在原始命令行上,尊重引号和其他特殊构造;一次在其他扩展的结果上,使用IFS变量、忽略引号等,bash不递归地对该结果执行其他扩展(也就是说,如果由于展开而产生的位置参数是一个字符串,如"$var1",则按字面方式将其传递到单引号中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39141699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档