我有一个问题,我认为这个问题相当简单,但我是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% 正确。我更想寻找解决问题的最佳方法。
希望此示例对 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到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