2017-04-07 97 views
0

我有2个bash脚本。一个正在呼唤另一个。bash变量之间的区别

Caller.sh

arg1="+hcpu_extra=111 bbb" 
str="-y +hcpu_extra=111 bbb" 

local cmd_re="(-y)(.*)" 

if [[ $str =~ $cmd_re ]] 
then 
    opt=${BASH_REMATCH[1]} 
    arg=${BASH_REMATCH[2]} 
    echo "matched $opt" 
    echo "matched $arg" 
fi 


./callee.sh -y $arg 
## ./callee.sh -y $arg1 

我发现,如果我打印$ ARG1和$阿根廷,他们在屏幕上显示相同的值 “+ hcpu_extra = 111 BBB”。但是当我将它们分别传递给callee.sh作为参数时。我得到了不同的结果。 所以我的问题是,从bash解释器的角度来看,$ arg和$ arg1有什么区别? 。

+1

你在callee.sh中获得的不同结果是什么?我假设你的意思是你在'callee.sh'中做'echo $ 2'' – Arash

+0

$ arg以空格开头,不是? – Robin479

回答

0

首先,代码不能正常发布,因为local只能在函数中使用。

如果删除local还是把这个功能,argarg1之间的唯一区别是,arg开始用空间(这就是一个“-y”和“+ hcpu”之间。但因为你”重新扩大那些没有双引号的变量,这些变量会被删除......除非你将IFS更改为不包含空格的东西

(顺便说一句,没有双引号的变量引用和对IFS的更改都是可以产生奇怪效果的东西,并且在可能的情况下最好避免。)

无论如何,我的总结是:发布的代码不会显示您描述的效果;你似乎漏掉了一些重要的东西。请参阅How to create a Minimal, Complete, and Verifiable example

+0

你说得对。代码片段来自函数内部。 双引号并不总是一个很好的选择。 –

相关问题