我是 bash 编程新手。我试图理解下面的代码。
我只知道$
是用来传递参数的。
function check_data () {
local pattern=$1 iterations=$2 tck=$3 tdi=$4 tdo=$5
...
}
pattern="0110011101001101101000010111001001"
pins=(2 3 4 17 27 22)
# tck, tdi, and tdo are integer number
checkdatret=$(check_data $pattern $((2*${#pattern})) ${pins[$tck]} ${pins[$tdi]} ${pins[$tdo]})
请问你能写出最后一行代码的执行步骤流程吗?
最佳答案
我们将了解 $
、#
的工作原理,然后回答问题。
第 1 部分
${#pattern}
将给出 pattern
所保存的字符串的长度。
因此,在上面的示例中
user@host:~$ echo ${#pattern}
34
因为 34 是字符串 0110011101001101101000010111001001
的长度。
第 2 部分
${pins[$tck]}
用于获取数组 pins
的索引 tck
处的值。如果没有设置该变量,则默认为0。这里,由于没有设置tck
,
${pins[$tck]}
相当于 ${pins[0]}
。因此输出将是:
user@host:~$ echo ${pins[$tck]}
2
输出将为 2,因为 bash 中数组索引从 0 开始。
第三部分
$()
用于 bash 中的命令替换。 ()
中的命令将被执行,并且输出将被替换。
原始问题
$((2*${#pattern}))
计算结果为 $((2*34))
,计算结果为 68
由于tck
、tdi
和tdo
未设置,因此默认为0。
因此,
${pins[$tck]}
计算结果为 ${pins[0]}
,其计算结果为 2
,即 pins
数组中的第一个元素。
同样,${pins[$tdi]}
和 ${pins[$tdo]}
的计算结果均为 2
因此脚本中的最后一行现在是,
checkdatret=$(check_data 0110011101001101101000010111001001 68 2 2 2)
现在将使用参数调用该函数
$1=0110011101001101101000010111001001
$2=68
$3=2
$4=2
$5=2
您需要回显
check_data
函数的结果,该结果将被替换为
checkdatret=YOUR_RESULT_FROM_FUNC
关于linux - shell/bash 编码中的 `&` 和 `#` 是什么意思?请解码 Bash 脚本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54235442/