这是一个全新的问题,但我正在努力,所以我道歉。
我正在使用bourne shell作为init脚本。
我有一个变量 A = 1 B =“欢迎来到世界#$ A”
在脚本的某处,我有一个循环,将A更新为2,3,4等...如何让B重新评估?目前,B一直都是“欢迎来到世界第一”。
谢谢!
更新#1 - 一些代码:
#!/bin/sh
A=1
B="Welcome to #$A"
repeatloop() {
for i in {1..5}
do
A=$i
echo $B
done
}
repeatloop
输出:
Welcome to #1
Welcome to #1
Welcome to #1
Welcome to #1
Welcome to #1
我想要获得#2,#3,#4 ....
答案 0 :(得分:1)
当您输入...
B="Welcome to the world #$A"
在为B分配值之前,$ A的值已扩展。这意味着您在那里输入的内容相当于......
B="Welcome to the world #1"
所以“重新评估”毫无意义,因为B实际上并没有变量。
如果您希望在实际引用某些内容之前不扩展变量,请改用函数:
function B() {
echo "Welcome to the world $1"
}
A=1
welcomeone=$(B $A)
A=2
welcometwo=$(B $A)
答案 1 :(得分:1)
每次执行B
作业时,您都需要执行A
作业:
#!/bin/sh
A=1
B="Welcome to #$A"
repeatloop() {
for i in {1..5}
do
A=$i
B="Welcome to #$A"
echo $B
done
}
repeatloop
顺便说一句#!/bin/sh
不是Bash(即使它是符号链接)。
答案 2 :(得分:1)
您可以将B参数设置为eval语句。然后在循环内调用它:
#!/bin/sh
A=1
B='eval echo "Welcome to #$A"'
repeatloop() {
for i in {1..5}
do
A=$i
$B
done
}
repeatloop
输出:
Welcome to #1
Welcome to #2
Welcome to #3
Welcome to #4
Welcome to #5
答案 3 :(得分:0)
问题是,B设置为当前A的值。如果你想要它更新,你将从一个用新值A重新创建B值的函数中得到它。
用c / java等其他语言来思考。
int a = 0;
string b = "blah blah blah" + a; // b= "blah blah blah0"
a = 4;
//b still equals "blah blah blah0"