Bash 如何将数字拆分为字符数组
我有点被什么东西卡住了。我有这样一个for循环:Bash 如何将数字拆分为字符数组,bash,shell,scripting,Bash,Shell,Scripting,我有点被什么东西卡住了。我有这样一个for循环: #!/bin/bash for i in {10..15} do 我想得到数字的最后一位,所以如果我是12,我想得到2。不过,我在语法方面有困难。我读到应该将其转换为字符数组,但当我执行以下操作时: j=${i[@]} echo $j 我没有得到10、11、12等等…我得到10、11、12……当我不知道有多少个数字将组成I(例如,它可能是1、10或100等)时,我如何将这些数字分开,以便得到最后一个I呢?诀窍是把$I当作字符串对待 for i
#!/bin/bash
for i in {10..15}
do
我想得到数字的最后一位,所以如果我是12,我想得到2。不过,我在语法方面有困难。我读到应该将其转换为字符数组,但当我执行以下操作时:
j=${i[@]}
echo $j
我没有得到10、11、12等等…我得到10、11、12……当我不知道有多少个数字将组成I(例如,它可能是1、10或100等)时,我如何将这些数字分开,以便得到最后一个I呢?诀窍是把
$I
当作字符串对待
for i in {10..15}; do j="${i: -1}"; echo $j; done
当然,如果您不想:
for i in {10..15}; do echo "${i: -1}"; done
此
awk
命令可以解决您的问题:
awk'{print substr($0,length,1)}测试文件
我假设这些数字保存在一个文件test\u文件中
如果要对循环使用:
for i in `cat test_1`
do
echo $i |tail -c 2
done
我想,使用哪种方法的答案是最明智的
但是,您也可以使用它,它允许在Bash中对变量进行C风格的操作
for i in {10..15}
do
(( j = i % 10 )) # modulo 10 always gives the ones' digit
echo $j
done
这看起来是不是太过分了?太过分了?我不明白。我只是想说可能有比这更简单的方法。:)此外,问题中没有任何内容表明数字存储在文本文件中。即使它们存储在文本文件中,您也可以使用shell内置程序来操作它们。由于cat
是一个外部可执行文件,我觉得for I in`cat test_1`
既不是解析文本文件的最佳方法,也不是推荐的方法。另外cat test_文件{124; awk'{print substr($0,length,1)}
可以像awk'{print substr($0,length,1)}测试文件一样被替换掉。
谢谢@Frank!这对所有数字都非常有效。