问题标签 [ifs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
515 浏览

arrays - Surprising array expansion behaviour

I've been surprised with the line marked (!!) in the following example:

Here is my understanding of the behavior:

  • ${X[*]} and ${X[@]} both expand to a b
  • "${X[*]}" expands to "a|b"
  • "${X[@]}" expands to "a" "b"
  • $* and $@ have the same behavior as ${X[*]} and ${X[@]}, except for their content being the parameters of the program or function

This seems to be confirmed by the bash manual.

In the line log1 "${X[*]}", I therefore expect the quoted expression to expand to "a|b", then to be passed to the log1 function. The function has a single string parameter which it displays. Why does something else happen?

It'd be cool if your answers were backed by manual/standard references!

0 投票
1 回答
76 浏览

excel - excel中复杂的嵌套IFS

所以我有这个输出来跟踪我的票系统,它有以下列:

如何创建一个公式来输出一周内某个项目的平均打开天数?

例如,2015 年第 32 周,位置“A”中分类为“1”的项目的平均打开天数是多少?

这应该是相等的(所有票“1”的总开放天数)/(项目“1”的总票打开)假设我已经知道总票打开。

And (resolved_date) – (create_date) if (last day of week) > (resolved_date),这表示工单在报告周内解决;= (last day of report week) - (create_date) if (last day of report week) < (resolved_date),这表示工单在报告周后被解决;= (报告周的最后一天) - (create_date) 如果 resolved_date = null,这表明工单现在还没有解决。

我正在考虑像这样的嵌套 ifs 公式 IF(condition1, value_if_true1, IF( condition2, value_if_true2, value_if_false2 )) 但对 Excel 不够熟悉,无法构建一个。

谢谢!

0 投票
4 回答
614 浏览

bash - 读取 -N 和 IFS

根据手册页中的“read -N”描述:

-N nchars 仅在准确读取 NCHARS 字符后返回,除非遇到 EOF 或读取超时,忽略任何分隔符

但是,在回答以下命令时:

空格和换行符都被翻译成空字符串,而在命令中:

空格和换行符已正确存储在变量中。

因此,分隔符在“read”或“while”命令中似乎仍有一些处理,我不明白。

我们可以将这些结果与使用“read -n”的结果进行比较,该手册描述为:

-n nchars 在读取 NCHARS 个字符后返回,而不是等待换行符,但如果在分隔符之前读取的 NCHARS 个字符少于此,则使用分隔符

0 投票
2 回答
488 浏览

string - 使用 IFS 在 bash 中将字符串拆分为单个字符

我正在尝试将字符串拆分为单个字符。例如temp="hello"进入"h", "e", "l", "l", "o"

我尝试使用 IFS,因为这是我在之前的字符串拆分中使用的,并且希望保持整个脚本的一致性。 IFS='' read h e l l o <<<"$temp"不起作用。我究竟做错了什么?

0 投票
1 回答
60 浏览

unix - 从文本文件中提取信息并在 unix 的命令中使用它

我正在尝试从名为“accounts.list”的 .list 文件中提取信息,并在 CentOS 7 的命令行操作中使用提取的信息。我知道有一个简单的解决方案,但我终生无法找到它。

因此,该文件的每一行都按以下格式列出:

我需要做的是为用户添加每一行的信息。因此,例如,我想将每个部分添加到一个变量中,然后在 adduser 命令中使用该变量:

所以我需要遍历每一行并提取该信息,添加用户,然后继续下一行。我想以最简单的方式做到这一点,但我尝试过的任何方法都没有奏效,任何帮助将不胜感激。

0 投票
3 回答
3737 浏览

bash - 为单个语句设置 IFS

GNU bash, version 4.3.42(1)-release正在做一些测试来回答一个问题。这个想法是将一个 - 分隔的:字符串及其每个元素拆分为一个数组。

为此,我尝试在命令范围内设置IFSto :,以便拆分是自动的并且IFS保持不变:

显然IFS保持不变:

BASH 参考说:

如果未设置 IFS,则参数以空格分隔。如果 IFS 为空,则将参数连接起来而不插入分隔符。

但是,然后我注意到IFS有点坏了,所以echo $myvar返回a b c而不是a:b:c.

取消设置值可以解决它:

但我想知道:是什么原因造成的?不只是在正在执行的命令范围内IFS=: command改变吗?IFS

我在为单个语句设置 IFS 中看到这确实有效:

但我不明白为什么它会这样做和IFS=: d=($myvar)不这样做。

0 投票
0 回答
116 浏览

bash - 如果我的输入命令参数是多行,我应该在 BASH for 循环中使用什么 IFS?

我想将 pcregrep 的每个单个完整的多行结果存储到 for 循环的每次迭代的变量中。

前任:

但是,我不确定我应该使用什么 IFS 来正确识别每个单独的 pcregrep 结果,以便我可以将其存储到变量中(每次迭代一个结果)。

我也愿意听到其他实现目标的迂回方法(即使它不涉及 IFS)

以下是我将使用的一些示例结果:

结果1:

结果 2:

提前致谢

0 投票
1 回答
62 浏览

arrays - 在 Bash 中创建数组数组并按派生值排序

我在 Bash 中创建和排序数组时遇到问题,该数组将其内容作为命令中的行,获取每行的某些部分并在将它们附加到数组中的每一行之前对其进行操作。

为了澄清,命令“bogoutil -d wordlist.db”以这种形式给出输出:

除了有几百万条这样的行。

我想将命令的每一行输出加载到一个数组中,将第一个数字的绝对值减去第二个数字,将该值附加到新数组中的行上,然后按该新值对新数组进行排序。

我遇到的问题是我怀疑 IFS 需要更改为 "\n" 以将 bogoutil 输出的每一行放入一个数组中,但随后它需要再次更改以标记每行中的第二个和第三个整数. 到目前为止,很难弄清楚我的错误是什么,因为数组中有超过 1000 万行,但我可以从输出中看出我得到的不是我应该得到的 - 我认为它只是列出每一行并且没有正确标记。通常它会运行一段时间,将大量输出打印到 shell 中,这绝对不是我所期望的(我认为它只是一些标记,但绝对不是全部)然后打印

这是我到目前为止所写的

任何帮助将不胜感激。我真的很难过,不知道为什么它不起作用。我怀疑这与我尝试标记每一行输出的方式有关,但我不确定。另一种可能性(假设它列出了一段时间的标记然后停止)是数组中的元素太多并且分配的空间不足。有这种可能吗?

在此先感谢,非常感谢您提供的任何帮助。

编辑:澄清预期的输入和输出。

样本输入将是

预期的输出将是

如您所见,它按第一个和第二个数字之差的绝对值排序。数据集中没有负数,最低的是 0。

编辑:下面的 awk 解决方案效果很好!我不确定如何使用 Bash,但我怀疑 bash 不是正确的方法,无论如何使用 awk 可能更好。感谢所有的帮助,非常感谢!

0 投票
1 回答
121 浏览

unix - 用于移动特定目录中的所有文件和目录的 UNIX 命令,除了一个单独的文件

我想将除特定文件之外的所有文件从单个目录移动到 mac 上的垃圾箱。

我不想移动该目录中的文件和文件夹,而是希望将所有文件和文件夹单独移动到垃圾箱。对于这个目录:

~/Desktop/script.sh

~/Desktop/File1

~/Desktop/Folder/File2

我希望 script.sh 留在桌面上,但垃圾目录中包含三个元素,如下所示:

~/.Trash/File1

~/.Trash/Folder

~/.Trash/File2

我发现extglob并且为了我的任务的目的,我将在我的脚本中启用和禁用它。我正在使用find,因为我想移动目录中的所有目录和文件和文件,当放入垃圾箱时,我希望所有文件和目录都是独立的。正如我希望目录中的文件位于该目录之外。

这是我创建的代码,我没有收到任何错误。

我的问题是find我用于此任务的正确命令,如果是这样,我哪里出错了,因为我能够成功完成我的任务,而不是单独排序文件,而不是在垃圾箱中的父目录中。

0 投票
0 回答
90 浏览

bash - 如何在一次循环一片时喂食?

如果我想读取一个字符串并在给定的分隔符上拆分它,我可以IFS在一个数组中设置和存储字符串切片。然后我可以对它的项目做任何我想做的事情:

这将返回:

但是,有时我只想在每个循环中读取其中一个字段。所以我想知道是否有一种方法可以让这个while循环每次都由一个切片提供。也就是说,在第一次迭代中read获得了 just a,在第二次迭代中获得了 just b,依此类推。

我找到了一种方法来改变我们提供循环的方式:相反<<< "a_b",我用一个新行tr替换每个来拆分它:_< <(tr "_" "\n" <<<"a_b")

但是,我想知道:还有其他方法吗?由于我们必须IFS更改字段分隔符,Bash 是否有任何其他变量来设置“记录分隔符” awk,例如有?