将一个号码引用到另一个号码

时间:2018-06-28 13:00:44

标签: bash

我有一个问题,我认为这很简单,但我是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%正确。我更是在寻找解决问题的最佳方法的解决方案。

2 个答案:

答案 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}}
...

http://zsh.sourceforge.net/Doc/Release/Expansion.html

答案 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