在Bash中,我试图从文本字符串中增加一个计数器变量(数字)。如果我单独调用counter var它会成功递增,但如果我在循环的每次迭代中回显字符串变量,则计数器变量不会递增。
#!/bin/bash
number=1
yes="number$number/"
for i in 1 2 3
do
echo $number
echo $yes
((number++))
done
我得到了这个输出:
1
number1/
2
number1/
3
number1/
我希望如此:
1
number1/
2
number2/
3
number3/
我也试过这个:
yes="number${number}/"
..给出了同样不正确的结果。
由于
答案 0 :(得分:3)
function dailyclear(e)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Today');
sheet.copyTo(ss)
var nusheet = ss.getSheetByName('Copy of Today')
var value = nusheet.getRange("B2").getCell(1,1).getValue()
SpreadsheetApp.setActiveSheet(nusheet)
Logger.log("Current index of sheet: %s", nusheet.getIndex())
ss.moveActiveSheet(2);
nusheet.setName(value);
//Clear "Today"
var lastrow = sheet.getLastRow()
sheet.deleteRows(8, lastrow-7);
//Set Date Value for "Today"
var dd = Utilities.formatDate(new Date(), "GMT-5", "MM/dd/yy");
sheet.getRange("B2").getCell(1,1).setValue(dd);
}
答案 1 :(得分:1)
正如你在评论中被告知的那样,扩展发生在转让时。变量$yes
包含一个字符串,其中包含赋值时$number
的值。分配后,$yes
的内容中没有任何内容表示与变量$number
的任何关联。
获得此类功能有两种常用方法。
首先,您可以使用eval
。
#!/usr/bin/env bash
number=1
yes='number$number/' # note the single quotes
for i in 1 2 3; do
echo "$number"
eval "echo \"$yes\""
((number++))
done
请注意,此处未更新$yes
的值 - 它只是用于展开echo
打印的内容。
您会发现许多人不鼓励使用eval
,因为它可能会产生意外的安全相关后果。
其次,每次循环时都可以更新yes
。
#!/usr/bin/env bash
number=1
for i in 1 2 3; do
echo "$number"
yes="number$number/"
echo "$yes"
((number++))
done
如果您希望将其用于格式化,那么printf
就是您的朋友:
#!/usr/bin/env bash
number=1
yesfmt='number%d\n'
for i in 1 2 3; do
echo "$number"
printf "$yesfmt" "$number"
((number++))
done
如果不了解更大的情况或您想要实现的目标,推荐策略就很困难。
答案 2 :(得分:0)
使用功能(我将名称从yes
更改为report
,因为yes
是标准的posix实用程序,无论如何它都没有描述性。)
#!/bin/bash
number=1
report() { echo "number$number/"; }
for i in 1 2 3; do
echo $number
report
((number++))
done