关于bash:bash-获取文件名的前3个字母

Bash - Get first 3 letters of filename

本问题已经有最佳答案,请猛点这里访问。

我有一个小bash脚本,有$file和$file2变量。这是文件,我想得到这个文件名的前3个字母。我想比较一下:

我试过:

1
2
3
4
5
6
7
8
curfile=$(basename $file)  
curfilefirst3=${curfile:0:3}
curfile2=$(basename $file2)
curfile2first3=${curfile2:0:3}

if ((curfilefirst3 == curfile2first3 )); then

....

但我觉得有问题,我该怎么解决?

谢谢您。


比较中的字符串缺少$,需要用"包装每个字符串,用[]包装整个表达式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
file="this.txt"
file2="that.txt"

curfile=$(basename $file)
curfilefirst3=${curfile:0:3}

curfile2=$(basename $file2)
curfile2first3=${curfile2:0:3}

echo $curfile2first3
echo $curfilefirst3

if ["$curfile2first3" =="$curfilefirst3" ]
then
   echo"same!"
else
   echo"different!"
fi

阅读bash条件可能是个好主意


子串提取

$字符串:位置从$position处的$string提取子字符串。但是,如果应该使用[而不是(如:

1
if [ $curfilefirst3 == $curfile2first3 ]; then

修正版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
file=abcdef
file2=abc123456
curfile=$(basename $file)
curfilefirst3=${curfile:0:3}
curfile2=$(basename $file2)
curfile2first3=${curfile2:0:3}
echo $curfilefirst3
echo $curfile2first3
if [ $curfilefirst3 = $curfile2first3 ]; then
echo same
else
echo different
fi

它打印相同所以,作品