问题标签 [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 投票
2 回答
522 浏览

git - 如何使用列单位分隔符查看 git log?

如何git log --graph使用列单位分隔符进行打印?

我希望消息垂直排列,而不是被图表缩进。

打印分支图、作者姓名和消息的示例命令:

输出缩进如下:

我的目标是这样的列布局:

如果可能的话,我想使用列单位分隔符,例如 ASCII 字符,\031也称为\x1F.

我正在为纯 git 的任何解决方案添加赏金,即不需要管道到 Unix 命令,如 column、sed、awk、pr 等。

0 投票
1 回答
1095 浏览

bash - 如何在bash中正确处理和打印带有空格的文件

我正在用 bash 编写一个简单的递归 ls 程序(我对此非常没有经验,所以随意残酷)。

该程序应该在单独的行上打印出每个文件(可能是目录),并且每次进入一个新目录时,输出都会移动 4 个空格,以提供树状输出。

目前,它不会正确打印带空格的文件,并且不会在目录后放置正斜杠。(下面有更多详细信息。)

代码

输出

该脚本包含在一个名为bash-practice. 当我这样做时recls .,我得到以下输出:

问题

如您所见,缩进工作正常,但有两个问题:

1)文件sample document.txt分布在两行,因为它有一个空格。

2)每个目录前面都应该有一个正斜杠,但由于某种原因,它只适用于第一个。

尝试的解决方案

为了修复 (1),我尝试保存内部文件分隔符并将其替换为换行符,如下所示:

但这根本不起作用。它甚至没有显示超过第一个文件夹。显然我对事物的理解是不正确的。

至于(2),我看不出它不应该按预期工作的任何理由。

结论

bash 对我来说很难,因为它似乎比大多数其他编程语言(作为一种 shell 脚本语言)有更多不寻常的语法,所以我希望能对我的错误有任何见解,以及解决方案。

更新#1

我去了mklement0建议的网站http://www.shellcheck.com,它的提示基本上都是双引号。当我双引号"$@"时,程序正确地打印了文件sample document.txt,但紧接着,它给了我一个“ binary operator expected”错误。这是它现在的样子的打印:

在此处输入图像描述

更新 #2 [问题解决了吗?]

好的,事实证明我有一个错字,导致它默认为myls_internal递归时调用的我的函数的早期版本。这个早期版本没有用正斜杠标记目录。“更新”部分中的错误消息也已修复。我换了行

myls_internal "$file/*"

recls_internal $file/*

现在它似乎工作正常。如果有人正在写答案,我仍然感谢您的见解,因为我并不真正了解引用“$@”如何解决间距问题的机制。

固定代码:

固定输出:

在此处输入图像描述

更新#3

线

recls_internal $file/*

应该改为

recls_internal "$file"/*

它正确处理带有空格的目录。否则,一个文件夹,如cs 350包含Homework1.pdfHomework2.pdf将展开为

cs 350/Homework1.pdf 350/Homework2.pdf

什么时候应该

cs 350/Homework1.pdf cs 350/Homework2.pdf

我认为?我并没有真正了解正在发生的事情的更详细的信息,但这似乎解决了它。

0 投票
2 回答
231 浏览

shell - IFS=$'\n' 删除了“n”

我对“IFS=$'\n' 有疑问。

当我执行脚本时:

“n”被删除。我想逐行查看文件

0 投票
1 回答
28 浏览

file - 将输出写入文件时出现问题

我正在阅读格式的小 csv 文件size,name- 每行一组。对于我的测试文件,我在 csv 文件中有两行。

如果我使用代码

每行的name值都会打印到终端。

如果我使用代码

然后只有最后一个name被打印到temp2.txt文件中。

我究竟做错了什么?!

0 投票
3 回答
1524 浏览

arrays - 使用 \| 在 bash 脚本中加入数组 作为分隔符

我的 bash 脚本中有一个带有 PID 的数组。我想加入这些 \| 作为分隔符,以便能够使用 grep 搜索与数组中任何 PID 匹配的任何内容。我基本上是在尝试更改 IFS,如下所示,但我遇到的问题是,而不是所需的输出:

我明白了

这是我正在使用的代码

我试图以各种方式更改输入,但没有任何效果。IFS 方法不可能吗?

0 投票
2 回答
842 浏览

arrays - 如何剪切bash数组中的最后3个元素并将它们添加到数组中

好吧,我目前正在编写一个脚本,它将获取一个带有“~”分隔符的文件并将其拆分。但是它们是数组中的一项,需要取出该元素的最后 3 个单词的 [5] 元素,将它们切掉并将它们分配给数组中的不同值,然后重新调整元素 [5] 以删除这些项目。我尝试过 sed、cut 和其他命令,但我迷路了。我正在为这个脚本使用 bash,下面是我的问题的简短形式。

当前打印:

想要打印:

0 投票
1 回答
439 浏览

bash - IFS 随着 Bash 4.2 的变化

运行这些命令会产生预期的结果

然而,在 Bash 4.2 中,IFS 值被忽略了

是什么导致了这种差异?

我在这里找到了答案

http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00065.html

看起来这一直是一个错误。根据 Chet 的说法,重定向不应该访问临时环境(IFS在这种情况下)

0 投票
2 回答
7625 浏览

regex - 在 Bash 中使用 2 个不同的分隔符拆分字符串

我正在尝试根据 2 个分隔符在 BASH 中拆分字符串 - 空格和 \. 这是字符串:-

我希望它分为 3 个部分,如下所示:-

我尝试过使用 IFS,它很好地分割了第一个。但是第二个拆分如何删除“\”并粘贴整个部分,我得到拆分为:-

我使用的IFS如下:-

提前致谢。

0 投票
2 回答
307 浏览

bash - 防止 IFS 在新行上停止

我有一个多行字符串,我想使用单个 delimiter 将其转换为数组|。但是,设置IFS=|时它将在新行出现之前停止:

我想知道为什么不会评估剩余的行以及如何防止这种情况发生,无论是否存在新行都能够分配每个变量?

0 投票
2 回答
875 浏览

bash - 带有读取和 IFS 的 Bash while 循环

我必须解析以下格式的文件:

并逐行处理,从当前行中提取所有参数。目前我已经以这种方式管理它:

如何避免创建临时文件?

不幸的是,这不能正常工作:

因为整行都分配给了 param1。