解析Linux中的参数。完全停止变为零

时间:2016-01-04 11:52:54

标签: shell parsing unix command-line

我有一个接受2个参数的shell脚本。 我按如下方式运行

myscript.sh 2015.0J.Oct 8.0.3

在剧本里面我有很多复杂的东西。在我使用echo命令的特定位置如下

echo Argument 1 - $1 
echo Argument 2 - $2

我的输出为

Argument 1 - 2015 0J Oct 
Argument 2 - 8 0 3

基本上所有的fullstops都会变成空白区域。 我尝试了几个小时的调试,但无法找到解决方案。我相信它的东西很小。

编辑:我认为我找到了解决方案。

添加

IFS= 
在回声解决问题之前

1 个答案:

答案 0 :(得分:2)

在您的脚本中的某个位置,在echo行之上,您有IFS=.行。

该行将“内部字段分隔符”设置为.。 shell使用此值在执行扩展后将值拆分为单词。

当shell将$1扩展为2015.0J.Oct时,使用该集(以及变量未引用),然后将其拆分为20150J和{{1}你得到了你看到的输出。

第一个解决方法是引用变量扩展... 始终引用变量扩展。

Oct

第二个是修复脚本中的任何内容,要求您全局修改echo "Argument 1 - $1" echo "Argument 2 - $2" 的值,而不需要您这样做。通常,对IFS的更改应尽可能地限制为一小段代码(即使只是通常使用IFS执行单个命令)。