我有2个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和$ arg,它们会显示相同的值" + hcpu_extra = 111 bbb"屏幕上。但是当我将它们分别传递给callee.sh作为参数时。我得到了不同的结果。 所以我的问题是,从bash解释器的观点来看,$ arg和$ arg1有什么区别? 。
答案 0 :(得分:0)
首先,代码将无法正常发布,因为除了函数外,local
不能使用。
如果您删除local
或将其放入函数中,arg
和arg1
之间的唯一区别是arg
以空格开头(那是一个空格)在“-y”和“+ hcpu”之间。但是由于你在扩展那些没有双引号的变量,所以它们将被移除......除非你将IFS
更改为不包含空间。
(顺便说一句,没有双引号的变量引用和对IFS的更改都可能产生奇怪的效果,并且在可能的情况下最好避免使用。)
无论如何,我的总结是:发布的代码没有显示您描述的效果;你似乎遗漏了一些重要的东西。请参阅How to create a Minimal, Complete, and Verifiable example。