【发布时间】:2016-11-06 15:59:57
【问题描述】:
我有 bash 脚本,它接受用户输入并将它们存储在变量中!我使用 awk 命令在文件中搜索一些模式:
#!/bin/bash
echo "Enter Data"
echo "Enter first pattern"
read firstpat
echo "Enter number"
read num1
echo "Enter name"
read name1
echo "Enter second pattern"
read secpat
echo "Enter second number"
read num2
echo "Enter name
read name2
awk '$0 >= "$firstpat $num1:$name1" && $0 <= "$secpat $num2:$name2"' /dir1/file1
脚本中的一切工作正常,但是 awk 命令没有显示任何结果。如果我在没有变量而不是文件的终端中运行相同的 awk 命令,它就可以工作!
【问题讨论】:
-
该命令完全是错误的,因为它试图访问 awk 脚本中的 shell 变量,它在终端中的工作不会比在文件中更好。如果您正在运行在终端中有效的命令,则它不是那个命令。 awk 不是外壳,请参阅cfajohnson.com/shell/cus-faq-2.html#Q24。
-
@EdMorton 在终端中运行,没有变量!
-
那么它显然不是同一个命令,为什么说它是?添加这样的红鲱鱼只会让你的问题变得混乱。 edit 您的问题只是简单地陈述事实而没有误导,这会使人们更难找出您遇到的问题并帮助您解决问题。 “为什么命令 X 有效,而命令 Y 无效?”是一个与“为什么命令 Y 在环境 A 中工作而不在环境 B 中工作?”非常不同的问题。
-
@EdMorton 我已经编辑了我的问题!
-
edit 你的问题是将单词“pattern”(或“pat”)替换为“regexp”或“string”,无论是你想要匹配的那个,作为单词“pattern” " 是模棱两可的,它在需求中的使用通常会导致脚本最初适用于某些输入,然后随后会因其他输入而失败。还添加简洁、可测试的示例输入和预期输出(即minimal reproducible example),以便我们可以看到您正在使用的内容。