- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在参加 Bash tutorial ,特别是分词的主题。
这个名为“args”的脚本有助于演示分词示例:
#!/usr/bin/env bash
printf "%d args:" $#
printf " <%s>" "$@"
echo
一个例子:
$ ./args hello world, here is "a string of text!"
5 args: <hello> <world,> <here> <is> <a string of text!>
到目前为止一切顺利。我了解这是如何工作的。
但是,当我用非空白字符替换 IFS 时,比如 :
,如果我直接将字符串作为参数传递,脚本不会执行分词。
$ ./args one:two:three
1 args: <one:two:three>
但是,如果我 (1) 将字符串分配给变量,然后 (2) 通过参数扩展将字符串传递给脚本,则脚本确实对同一字符串执行分词。
$ IFS=:
$ variable="one:two:three"
$ ./args $variable
3 args: <one> <two> <three>
为什么?具体来说,为什么当 IFS 未设置且定界符为空白字符时,将字符串作为参数传递会进行分词,而当 IFS 设置为非空白字符时则不会?
当我使用 read
而不是这个脚本时,同一个字符串也会按预期进行分词。
$ IFS=:
$ read a b c
one:two:three
$ echo $a $b $c
one two three
最佳答案
您可以阅读有关分词的更多信息 here .
The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting.
当您将裸字符串 one:two:three
作为 IFS 设置为 :
的参数传递时,Bash 不会进行分词,因为裸字符串是 < em>不是参数扩展、命令替换或算术扩展上下文之一。
但是,当将相同的字符串分配给一个变量并且该变量不加引号地传递给脚本时,确实会发生分词,因为这是参数扩展的情况。
同样的事情也适用于这些(命令替换):
$ ./args $(echo one:two:three)
3 args: <one> <two> <three>
$ ./args "$(echo one:two:three)"
1 args: <one:two:three>
作为documented , read
命令确实对读取的每一行进行分词,除非 IFS 已设置为空字符串。
关于bash - Bash 中的单词拆分,IFS 设置为非空白字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43163225/
写多个if语句和if-else-if语句有什么区别吗? 当我尝试用多个 if 语句编写程序时,它没有给出预期的结果,但它与 if-else-if 一起工作。 条件是互斥的。 最佳答案 当您编写多个 i
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
这个问题在这里已经有了答案: Difference between multiple if's and elif's? (9 个回答) 7年前关闭。 例如... 据一些专家介绍, 这里的条件是互斥的:
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我目前正在开发一个项目(一个非常简单的临时书店),其中有两个类(一个用于管理用户帐户,一个用作驱动程序类),其中通过驱动程序类的main方法。根据项目规范,此菜单由 while 循环表示,用户在其中键
检查文件的 if 条件有两个开关:-e 和 -f。 这两者有什么区别? 最佳答案 参见:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01
我在下面列出了一个问题和两个答案。答案背后的逻辑对我来说似乎是相同的,但解决方案 A 有效,而解决方案 B 返回“false”,除非“x”是字符串的第一个字母。这是为什么? 问题: 编写一个名为 ha
我很好奇,下面的代码: 代码 1: var myValue = 10; if(isBlocked) myValue = 20; 代码 2: var myValue; if(isBlocked)
我有一列“小时”我有一列“种类”(可以是 1,2 或 3) 我想做这样的事情: SELECT count(id), SUM(hour) as totHour, SUM( IF ( kind = 1,
版本 A: if ((A)&&(B)) doSth; if (B) doSthElse; 版本 B: if (B) { if (A) doSth; doSthElse; } 就性能而言
这个问题在这里已经有了答案: How do I split a string on a delimiter in Bash? (37 个答案) How to separate fields with
2 个 if 语句和 1 个 if-else 语句有什么区别? int x; cin >> x; if (x==10) cout > x; if (x==10) cout << "
所以我发现在 Perl 6 中写一个带括号的 if 语句会导致它向我抛出这个错误: ===SORRY!=== Word 'if' interpreted as 'if()' function call
我只想在 if 语句为真时才执行块标记。这就是我的意思。这是我的模板: {% extends "homePageBase.html" %} {% if not blogPage %} {% b
我的问题是这样的。假设我有一个名为 A 的数组,并且我只希望根据条件发生某些操作。什么更有效: 我) A.forEach(x => { if (condition1) { //do stu
function changeDrop() { var windowSize = $(window).width(); if (windowSize > 450) {
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我有一个网页,其中包含特定股票是否开仓/平仓的指示器。为此,我想设置一个 if & else if 语句。由于某种原因,我在 eclipse 中遇到错误。 *注意:不知道它是否有帮助,但是如果我将代码
为什么 if (prev = this.Prev()) { ... } 工作但是 if (var prev = this.Prev()) { ... } 不是吗? this.Prev(
下面的coffeescript代码 if a isnt undefined b = 1 if a? b = 1 编译成下面的javascript var b; if (a !== void
我是一名优秀的程序员,十分优秀!