如何在UNIX中使用其他预定义变量将变量设置为expr?

时间:2015-11-19 20:01:07

标签: shell unix

我在UNIX中编写代码将txt文档翻译为html。 我传入的第一个参数是要在标题中使用的文件中的行数。 第二个是要翻译的文件。

到目前为止,我有:

numLinesInTitle=$1
lineCount=`wc -l $2`
firstInput=`head -$numLinesInTitle $2`

到目前为止这一切都有效。 这是我遇到问题的地方:

numBodyLines=`expr $lineCount - $1`

它表示expr语法错误

1 个答案:

答案 0 :(得分:2)

您遇到的问题可能是您的$lineCount变量比您想象的要多。

尝试运行wc -l /etc/passwd,看看你得到了什么。现在取出结果(整个结果)并将其提供给expr,看看你得到了什么。 (剧透:“语法错误”。)

问题是wc命令会显示文件的名称以及该文件中的行数。为避免这种行为,您可以要求它告诉您来自STANDARD INPUT的行数。例如:

lineCount=`wc -l < $2`

这应该解决这个特殊问题。以下是一些可以解决未来问题的提示。

  • 使用现代引用结构。 lineCount=$(wc -l < $2)会更好。
  • 引用您的变量。如果文件名中有空格会怎么样? lineCount=$(wc -l < "$2")会更好。