我正在过滤macOS(High Sierra)上的apply(mydata, 2, function(x) c(x[is.na(x)], x[!is.na(x)]))
# V1 V2 V3 V4 V5 V6
#[1,] 1 NA NA NA NA NA
#[2,] 2 1 NA NA NA NA
#[3,] 3 2 1 NA NA NA
#[4,] 4 3 2 1 NA NA
#[5,] 5 4 3 2 1 NA
#[6,] 6 5 4 3 2 1
的输出,以使用简单的if语句触发操作,尽管相应的字符串似乎匹配也没有触发该操作(使用ifconfig
。
运行脚本时,如果网络echo
处于活动状态,则预期的操作是打印OK。
我尝试过:
en1
在printf "%s"
命令中awk
使用双引号(简单)"active"
保留在变量中以进行比较active
代替en1_status=`...`
没有成功。
en1_status=$(...)
并且#!/bin/bash
en1_status=`ifconfig en1 | grep "status: " | awk '{print $2}'`
if [ "$en1_status" = active ]; then
echo OK
fi
似乎与$en1_status
相匹配:
active
答案 0 :(得分:5)
这通常意味着您的变量中包含不可打印的字符,例如语法突出显示或DOS换行符。
发生这种情况的一种简单方法是,如果您将grep
实例设置为始终插入颜色代码,例如--color=always
,而不是默认的(更安全的)--color=auto
。 / p>
要对此进行跟踪,请比较以下命令的输出:
printf '%s' "$en1_status" | xxd
printf '%s' inactive | xxd
您还可以通过让grep
进行搜索来模拟awk
的配置:
en1_status=$(ifconfig en1 | awk '/status: / { print $2 }')
答案 1 :(得分:0)
如果您在if
比较的右边加双引号,则您的解决方案可以在MacOS上使用(我用inactive
代替了我的本地测试,因为该接口在我本地没有激活): / p>
~/> cat test.sh
#!/bin/bash
en1_status=`ifconfig en1 | grep "status: " | awk '{print $2}'`
if [ "$en1_status" = "inactive" ]; then
echo OK
fi
当我运行它时:
~/> ./test.sh
OK