bash变量之间的区别

时间:2017-04-07 13:48:25

标签: bash

我有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有什么区别? 。

1 个答案:

答案 0 :(得分:0)

首先,代码将无法正常发布,因为除了函数外,local不能使用。

如果您删除local或将其放入函数中,argarg1之间的唯一区别是arg以空格开头(那是一个空格)在“-y”和“+ hcpu”之间。但是由于你在扩展那些没有双引号的变量,所以它们将被移除......除非你将IFS更改为不包含空间。

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

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