我总是在我的交互式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)具有良好的制表符补全功能。
那么1和7呢?在shell脚本中,在读取man 5 passwd之后声明一些常量变量(如LoginField=1和ShellField=7 )是一种很好的方法。但是当有人在交互式shell中编写代码时,打开一个新窗口并搜索LoginField=1和ShellField=7的常量并对其进行定义并不是一个好主意。如何使用制表符补全来简化操作?
发布于 2017-08-05 19:40:28
使用变量:
LoginField=1 ShellField=7
cut --delimiter=: --fields="$LoginField,$ShellField" /etc/passwd发布于 2017-08-05 19:42:23
就像在其他语言中一样-通过使用变量。示例:
$ username_column=1
$ shell_column=7
$ cut --delimiter=: --fields="$username_column","$shell_column" /etc/passwd变量可以在脚本的顶部定义,以便可以轻松修改,或者可以在由多个脚本共享的类似配置的外部文件中进行设置。
发布于 2017-08-06 11:13:08
解析/etc/passwd的经典方法是将每一列读取到一个适当命名的变量中:
while IFS=: read name passwd uid gid gecos home shell _; do
...
done < /etc/passwdhttps://stackoverflow.com/questions/45521437
复制相似问题