【发布时间】:2018-01-13 06:08:57
【问题描述】:
我总是在我的交互式 shell 和 shell 脚本中写一些幻数。
例如,如果我想列出我的用户名和 shell,我会写
cut --delimiter=: --fields=1,7 /etc/passwd
存在两个幻数1,7。在其他情况下,幻数越来越多。
问题
如何避免交互式 shell 和 shell 脚本中的幻数?
补充背景
我们的老师告诉我们使用cut -d: -f1,7 /etc/passwd。但是对于新的linux用户,他们不知道d,f,1,7是什么意思。(不只是新的linux用户,整个系统的配置文件太多了一个人记住每个幻数并不容易)
因此,在交互式 shell 中,我们可以使用 --delimiter、--fields,并且 bash repl(或 zsh,fish) 具有良好的 tab 补全功能。
1 和 7 怎么样?在 shell 脚本中,在阅读 man 5 passwd 之后声明一些 const 变量如 LoginField=1 和 ShellField=7 是一个很好的方法。但是当有人在交互式shell中编写时,打开一个新窗口并搜索LoginField=1,ShellField=7的常量并定义它并不是一个好主意。如何使用 tab 补全之类的东西来简化操作?
【问题讨论】:
-
为什么不直接声明一些变量,比如
USER_NAME_COLUMN=1和BIN_FILE_COLUMN=2,然后最后在脚本中使用它:cut --delimiter=: --fields=$USER_NAME_COLUMN,$BIN_FILE_COLUMN /etc/passwd -
除了分配一些有意义的变量名之外,问题实际上是
1, 7是否实际上是固定的,或者您是否在询问是否可以从数据文件中以某种方式派生它们。您总是可以找到字段的数量,但您需要一些方法来告诉脚本使用哪个。您始终可以将它们作为参数传递给您的脚本。 -
我们(以及 shell 文档)谈论交互式 shell。当你写REPL 时,没有人知道你在说什么,尽管这个词很笼统,但正确。
标签: linux bash shell unix magic-numbers