我如何在bash中创建这个PHP行的等价物?

时间:2016-02-02 16:28:57

标签: php bash

以下是PHP专栏:

intval(substr($strIn,$i, 2), 32);

我正在尝试将其转换为bash,首先我知道由于bash如何处理变量而不需要intval,所以我不需要第一部分,但是我读过{{1}但是我无法弄清楚它在这种情况下的作用。有谁知道bash中的等价物是什么?

3 个答案:

答案 0 :(得分:1)

substr($strIn, $i, 2)$strIn返回2个字符,从偏移$i开始。例如,substr('foobar', 3, 2)会返回'ba'

bash中的等价物是:

STR=foobar
echo ${STR:3:2}

如果起始偏移量没有固定但存储在变量中,则它就像这样:

STR=foobar
i=2
echo ${STR:$i:2}          # It displays: ob

答案 1 :(得分:1)

PHP输入松散;您很少需要将字符串显式转换为intval()的整数。但是,其中一种情况是你使用不同的基数。注意intval()的第二个参数是32,这意味着它从基数32转换。当然,bash也可以这样做:

strIn=foobar
i=2
echo $((32#${strIn:$i:2}))

请注意,这是使用bash-specific base conversion,并且不一定能在其他shell中使用。

测试结果:

mike ~ $ php -a
Interactive shell

php > $strIn = 'foobar';
php > $i = 4;
php > echo intval(substr($strIn,$i, 2), 32);
347
php > exit
mike ~ $ strIn="foobar"
mike ~ $ i=4
mike ~ $ echo $((32#${strIn:$i:2}))
347
mike ~ $ 

答案 2 :(得分:0)

实现这一目标的另一种方法是使用cut:

substr($ strIn,$ i,$ length)等价物:

end=$(expr $i + $length)
echo $strIn | cut -b $i-$end