我有一个接受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=
在回声解决问题之前
答案 0 :(得分:2)
在您的脚本中的某个位置,在echo
行之上,您有IFS=.
行。
该行将“内部字段分隔符”设置为.
。 shell使用此值在执行扩展后将值拆分为单词。
当shell将$1
扩展为2015.0J.Oct
时,使用该集(以及变量未引用),然后将其拆分为2015
,0J
和{{1}你得到了你看到的输出。
第一个解决方法是引用变量扩展... 始终引用变量扩展。
Oct
第二个是修复脚本中的任何内容,要求您全局修改echo "Argument 1 - $1"
echo "Argument 2 - $2"
的值,而不需要您这样做。通常,对IFS
的更改应尽可能地限制为一小段代码(即使只是通常使用IFS
执行单个命令)。