我有一个问题,我认为这很简单,但我是Bash的新手,因此无法找到太多信息。
5个参考文献3
10个参考文献4
20个参考文献10
30个参考文献20
inputBeforeLookup = 5 #this the number which needs to look up 3 above^^^^
# 10 would lookup and return 4
#20 returns 10
start = 1
end = $start + $lookupNumberfromFile # 3 in this case, since input was 5
seq $start $end
1
2
3
4
我想我的问题是,像配置文件那样将数字引用到其他数字的正确方法是什么?
如果有比我发布的代码段更好的方法,我总是乐于接受建议,就像我说的那样。
我对此并不陌生,所以我不确定语法是否100%正确。我更是在寻找解决问题的最佳方法的解决方案。
答案 0 :(得分:1)
希望此示例可以帮助您了解bash中的变量扩展:
请注意:\
阻止扩展$$(当前进程ID)。对于三重替换,您需要双eval
,依此类推。...
#!/bin/bash
one=1
two=one
three=two
four=three
five=four
echo $one
eval echo \$$two
eval eval echo \\$\$$three
eval eval eval echo \\\\$\\$\$$four
eval eval eval eval echo \\\\\\\\$\\\\$\\$\$$five
输出:
1
1
1
1
1
奖金:
在zsh
中,您可以更轻松地使用嵌套替换:
#!/bin/zsh
one=1
two=one
three=two
four=three
five=four
echo $one
echo ${(P)two}
echo ${(P)${(P)three}}
...
答案 1 :(得分:0)
设置一个关联数组,然后用数字 1 到 30 进行测试。那些没有引用其他数字的数字将按原样打印 :
MYMAP=( [5]=3 [10]=4 [20]=10 [30]=20 )
seq 30 | while read x ; do echo ${MYMAP[$x]:-$x} ; done | paste - - - - -
最后一个| paste - - - - -
不是必需的,但是鉴于输入具有5的数倍,因此更容易进行5列输出。输出:
1 2 3 4 3
6 7 8 9 4
11 12 13 14 15
16 17 18 19 10
21 22 23 24 25
26 27 28 29 20