在bash脚本中,我需要比较两个字符串的第一个字符。
为此,我使用head
运算符,如下所示:
var1="foo"
var2="doo"
headVar1=$(head -c1 $var1)
headVar2=$(head -c1 $var2)
if [ $headVar1 == $headVar2 ]
then
#miau
fi
但控制台说“头:不能打开foo阅读:不存在文件或导演” 和doo一样
一些帮助?
感谢。
答案 0 :(得分:3)
[idx,C] = kmeans(X,3);
x1 = min(X(:,1)):0.01:max(X(:,1));
x2 = min(X(:,2)):0.01:max(X(:,2));
[x1G,x2G] = meshgrid(x1,x2);
XGrid = [x1G(:),x2G(:)]; % Defines a fine grid on the plot
idx2Region = kmeans(XGrid,3,'MaxIter',5,'dist','sqeuclidean');
figure;
gscatter(XGrid(:,1),XGrid(:,2),idx2Region,...
[0,0.75,0.75;0.75,0,0.75;0.75,0.75,0],'..');
hold on;
plot(X(:,1),X(:,2),'k*','MarkerSize',5);
xlabel 'Petal Lengths (cm)';
ylabel 'Petal Widths (cm)';
legend('Region 1','Region 2','Region 3','Data','Location','Best','NE');
hold off;
将head
解释为文件名。有关该命令的可用选项,请参阅foo
。
要将命令输出存储在变量中,请使用命令替换:
man head
可以使用“here string”缩短:
headVar1=$(printf %s "$var1" | head -c1)
但是在这种情况下参数扩展要快得多,因为它不会产生子shell:
headVar1=$(head -c1 <<< "$var1")
答案 1 :(得分:1)
您的代码必须是,
var1="foo"
var2="doo"
headVar1=$(head -c1 <<<"$var1")
headVar2=$(head -c1 <<<"$var2")
if [[ "$headVar1" == "$headVar2" ]]
then
echo "It's same"
else
echo "Not same"
fi
删除等号旁边的空格(变量赋值部分)。
使用<<<
将变量的输入提供给相应的函数。
变量名必须以美元$
符号开头。
答案 2 :(得分:0)
迂回但POSIX兼容的解决方案:
var1="foo"
var2="doo"
headVar1=${var1%${var1#?}}
headVar2=${var2%${var2#?}}
if [ "$headVar1" = "$headVar2" ]
then
#miau
fi
${var1#?}
扩展为var1
减去其第一个字符的值。它用作后缀以${var1%...}
删除,最后只留下var1
的第一个字符。