如何在bash中设置一系列数组元素

时间:2016-06-24 06:52:37

标签: arrays bash

我有一个零数组

declare -a MY_ARRAY=( $(for i in {1..100}; do echo 0; done) )

如何设置,例如,12-25到" 1"?我试过了:

MY_ARRAY[12..25]=1
MY_ARRAY[12:25]=1
MY_ARRAY[12-25]=1  

一切都行不通..

范围12-25将是从另一个文件获取的变量。 我正在寻找一个简单的解决方案,更好地不涉及循环

请帮助

3 个答案:

答案 0 :(得分:3)

简单的单行: -

for i in {12..25}; do MY_ARRAY[$i]=1; done

有关更多操作示例,请参阅第Arrays页。

如果开始&结束值存储在变量中,大括号扩展不起作用。在这种情况下,你应该像这样使用for循环:

$ declare -i start=12
$ declare -i end=25
$ for ((i=$start;i<=$end;i++)); do MY_ARRAY[$i]=1; done

答案 1 :(得分:2)

您可以这样使用val lines = sc.textFile("result/hebe") case class Foo(id: String, count: Long) val parsed = lines .map(l => l.stripPrefix("(").stripSuffix(")").split(",")) .map(l => new Foo(id=l(0),count = l(1).toLong))

eval

如果您想知道eval MY_ARRAY[{12..25}]=1\; 编辑的内容,请将eval替换为eval
Using eval is generally considered as a no-no。但是这里使用eval应该是完全安全的。

另一方面,

echo

也可以重写为

for i in {1..100}; do echo 0; done

编辑:开始&amp;结束存储在变量中,这可能有效:

printf '%.1s\n' 0{1..100}

但在这种情况下,你应该真正使用循环。这个答案仅用于演示/信息。

答案 2 :(得分:2)

@Override
public void onBackPressed() {
if (mBacktwice) {
    super.onBackPressed();
    return;
}

this.mBacktwice = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        mBacktwice=false;                       
    }
}, 2000);
} 

<强>更新
如果值12和25包含两个变量,那么就说declare -a MY_ARRAY=( $(printf "%.2s" 0' '{1..11}) # 11 first zeroes $(printf "%.2s" 1' '{12..25}) # 14 ones $(printf "%.2s" 0' '{26..100}) # remaining zeroes ) From

To