首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免shell中出现幻数?

如何避免shell中出现幻数?
EN

Stack Overflow用户
提问于 2017-08-05 19:36:04
回答 6查看 492关注 0票数 1

我总是在我的交互式shell和shell脚本中写一些神奇的数字。

例如,如果我想要列出我的用户的名称和shell,我会这样写

代码语言:javascript
复制
cut --delimiter=: --fields=1,7 /etc/passwd

这里有两个神奇的数字:17。在其他情况下,魔术数字也越来越多。

问题

如何避免在交互式shell和shell脚本中出现幻数?

补充背景

我们的老师告诉我们使用cut -d: -f1,7 /etc/passwd。但是对于linux的新用户来说,他们不知道df17是什么意思。(不仅仅是对于linux的新用户,整个系统有如此多的配置文件,以至于一个人很难记住每个魔术数字)

因此,在交互式shell中,我们可以使用--delimiter--fields,并且bash repl(或zsh、fish)具有良好的制表符补全功能。

那么17呢?在shell脚本中,在读取man 5 passwd之后声明一些常量变量(如LoginField=1和ShellField=7 )是一种很好的方法。但是当有人在交互式shell中编写代码时,打开一个新窗口并搜索LoginField=1ShellField=7的常量并对其进行定义并不是一个好主意。如何使用制表符补全来简化操作?

EN

回答 6

Stack Overflow用户

发布于 2017-08-05 19:40:28

使用变量:

代码语言:javascript
复制
LoginField=1 ShellField=7
cut --delimiter=: --fields="$LoginField,$ShellField" /etc/passwd
票数 1
EN

Stack Overflow用户

发布于 2017-08-05 19:42:23

就像在其他语言中一样-通过使用变量。示例:

代码语言:javascript
复制
$ username_column=1
$ shell_column=7 
$ cut --delimiter=: --fields="$username_column","$shell_column" /etc/passwd

变量可以在脚本的顶部定义,以便可以轻松修改,或者可以在由多个脚本共享的类似配置的外部文件中进行设置。

票数 1
EN

Stack Overflow用户

发布于 2017-08-06 11:13:08

解析/etc/passwd的经典方法是将每一列读取到一个适当命名的变量中:

代码语言:javascript
复制
while IFS=: read name passwd uid gid gecos home shell _; do 
   ...
done < /etc/passwd
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45521437

复制
相关文章

相似问题

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