linux - 为什么当我在命令中使用变量时它会停止工作?|| 外壳脚本
问题描述
早上好,我是脚本世界的新手,我有这个问题,我不知道为什么会发生在我身上,为什么我错了,在此先感谢。
例如,我有这个命令可以搜索字母少 X 的用户:
cut -d: -f1 /etc/passwd | awk 'length($1) <= 4'
它可以正常工作,但是当我用 4 替换具有相同值的变量时,效果不佳:
number=4
echo -e $(cut -d: -f1 /etc/passwd | awk 'length($1) <= $number')
当我搜索具有旧密码的用户时,同样的错误也发生在我身上
awk -F: '{if($3<=18388)print$1}' < /etc/shadow
有效,但是当我使用变量时它停止工作
variable=18388
awk -F: '{if($3<=$variable)print$1}' < /etc/shadow
解决方案
考虑使用awk's
通过-v
选项导入变量的能力,例如:
number=4
cut -d: -f1 /etc/passwd | awk -v num="${number}" 'length($1) <= num'
虽然如果第一个字段/etc/passwd
包含空格,并且您想考虑整个字段的长度,您应该替换$1
为$0
,例如:
number=4
cut -d: -f1 /etc/passwd | awk -v num="${number}" 'length($0) <= num'
更好的是,通过将输入字段分隔符指定为冒号,消除cut
和子进程(由于管道)并用于整个操作:awk
number=4
awk -F':' -v num="${number}" 'length($1) <= num { print $1 }' /etc/passwd
推荐阅读
- javascript - 覆盖 Webpack 4.25.1 在生产模式下对 Uglify 的使用
- google-apps-script - 如何解释 Google 服务的配额
- javascript - 作为道具传递的反应元素的反应参考,动态事件
- php - 使用php中的邮件将链接作为文本发送
- javascript - 如何克隆 div 内容并一次只附加一个?
- java - 尝试通过动作侦听器按钮 JAVA Swing GUI 添加 JFrame
- javascript - 带破折号分隔符的 RegEX 14 位验证
- python - __eq__ 如何对 node1.x == node2.x 和 node 1.y == node2.y 起作用?
- json - 将json对象转换为记录集?
- android - 未在已安装应用列表中找到该应用