BASH:使用String作为文件输出

时间:2015-11-08 16:26:05

标签: bash unix

在bash脚本中,我需要比较两个字符串的第一个字符。

为此,我使用head运算符,如下所示:

var1="foo"
var2="doo"
headVar1=$(head -c1 $var1)
headVar2=$(head -c1 $var2)

if [ $headVar1 == $headVar2 ]
  then
    #miau
fi

但控制台说“头:不能打开foo阅读:不存在文件或导演” 和doo一样

一些帮助?

感谢。

3 个答案:

答案 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的第一个字符。