在bash中文件作为变量的绝对路径

时间:2018-10-22 22:36:57

标签: linux bash

我编写了一个程序,该程序应该搜索一长串随机数字以找到pi的最长十进制表示形式(但不能超过9)。代码是:

read -p 'Please specify one: ' fil1
dire=$( locate $fil1 )
if[ <grep -o '314159265' $dire | wc -w> -gt 0 ]
then
echo The longest decimal representation has 9 digits.
return [0]
fi
if[ <grep -o '31415926' $dire | wc -w> -gt 0 ]
then

我的错误消息是wc: 0] No such file or directory ./pierex.sh: line 7: grep: No such file or directory,并且在出现这些命令的每一行中都类似。我做错了什么?

1 个答案:

答案 0 :(得分:2)

像这样的行

if [<grep -o '31415925' $dir3 | wc -c> -gt 0]

应为:

if [ $(grep -o '31415925' $dir3 | wc -c) -gt 0 ]

用于替换命令输出的语法为$(command),而不是<command>。与其他命令一样,[命令在命令名称和参数之间需要一个空格。

顺便说一句,您无需重复运行grep就可以做到这一点。您可以使用:

match=$(grep -o -E '3(1(4(1(5(9(26?)?)?)?)?)?)?' "$dire")

这将返回最长的匹配项,然后您就可以得到$match的长度。假设文件中只有一个匹配项;如果不是,则可以按长度对结果进行排序,并得到最长的结果。参见Sort a text file by line length including spaces

还请注意,所有这些正则表达式都将与另一个数字中间某个位置的π的数字匹配。 42 31314 。为防止这种情况,您应该在开头匹配一个非数字:

grep -o -E '(^|[^0-9])31415925'