- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在我运行脚本之前我输入了
# export CPIC_MAX_CONV=500
下面是test1.script文件
#!/bin/bash
function cpic () {
var="`export | grep -i "CPIC_MAX_CONV" | awk '/CPIC_MAX_CONV/ { print $NF } '`"
[[ $var=="" ]] && (echo "Empty String <<")
[[ $var!="" ]] && (echo "$CPIC_MAX_CONV")
echo "$var" ;
}
cpic
输出是:
# test1.script ---- Me running the file
Empty String <<
500
CPIC_MAX_CONV="500"
无论我用什么 ""或 '' 或 [ 或 [[ 结果都是一样的。 CPIC_MAX_CONV
变量由上述脚本找到。
我在 Linux/CentOS 6.3 上运行它。
想法很简单:查找环境中是否定义了 CPIC_MAX_CONV
并返回它的值。如果那里有空格,那么当然该变量不存在于系统中。
最佳答案
为什么你总是对的?让我们先在您的终端中玩一下:
$ [[ hello ]] && echo "True"
你认为输出是什么? (试一试!)还有以下内容?
$ [[ "" ]] && echo "True"
(试试吧!)
好吧,看来非空字符串相当于真表达式,空字符串(或未设置的变量)相当于假表达式。
您所做的如下:
[[ $var=="" ]]
和
[[ $var!="" ]]
所以你给出了一个非空字符串,这是真的!
为了执行测试,您实际上需要在标记之间使用空格:
[[ $var == "" ]]
相反。现在,您的测试最好写成:
if [[ -z "$var" ]]; then
echo "Empty String <<"
else
echo "$CPIC_MAX_CONV"
fi
(没有子 shell,只有一个测试)。
关于您的脚本风格还有更多要说的。没有冒犯,我会说这真的很糟糕:
不要使用反引号!请改用 $(...)
结构。因此:
var="$(export | grep -i "CPIC_MAX_CONV" | awk '/CPIC_MAX_CONV/ { print $NF } ')"
不要使用function blah
来定义函数。您的函数应该定义为:
cpic () {
local var="$(export | grep -i "CPIC_MAX_CONV" | awk '/CPIC_MAX_CONV/ { print $NF } ')"
if [[ -z "$var" ]]; then
echo "Empty String <<"
else
echo "$CPIC_MAX_CONV"
fi
}
哦,我使用了 local
关键字,因为我猜你不会在函数 cpic
之外使用变量 var
.
现在,函数 cpic
的目的是什么,尤其是您定义变量 var
的那些东西?很难描述(因为有很多你没有想到的情况)。 (顺便说一句,你的 grep
在这里似乎真的没用)。以下是您忽略的一些情况:
somethingfunnyCPIC_MAX_CONVsomethingevenfunnier
导出的变量在某处包含字符串 CPIC_MAX_CONV
,例如,
export a_cool_variable="I want to screw up Randhawa's script and just for that, let's write CPIC_MAX_CONV somewhere here"
好吧,我不想描述你的线路到底在做什么,但我猜你的目的是了解变量 CPIC_MAX_CONV
是否设置并标记为导出,对吧?在那种情况下,你最好这样做:
cpic () {
if declare -x | grep -q '^declare -x CPIC_MAX_CONV='; then
echo "Empty String <<"
else
echo "$CPIC_MAX_CONV"
fi
}
它会更高效,也更健壮。
哦,我现在正在阅读您帖子的结尾。如果您只想知道变量 CPIC_MAX_CONV
是否已设置(设置为某个非空值 - 似乎您不关心它是否标记为导出,如果我错了请纠正我),它甚至更简单(而且效率会高得多):
cpic () {
if [[ "$CPIC_MAX_CONV" ]]; then
echo "Empty String <<"
else
echo "$CPIC_MAX_CONV"
fi
}
同样如此!
关于linux - Bash 脚本为两个但相反的字符串测试返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14025447/
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我想从输入对象内部开始找到下一个表单元素。Find() 是查找子对象的绝佳函数。但是在父级中寻找相反的方法呢?
是否可以执行$(this)的相反操作? 因此,它不是获取 this 元素,而是获取与 .sb-popular-thumb a 匹配但不包括 $(this) 的所有内容? 请参阅下面的示例代码。我已用
这是一个关于术语的问题。 考虑到有一个方法使用词法this: var foo = { method: function () { console.log(this, ' is the co
我想问你是否存在一个与 WHERE IN 相反的命令,我想选择数组中具有不同参数的所有行。 1 && id <> 2 && id <> 3"; // how can i do the same q
是否有语法来获取不在给定切片内的列表元素?给定切片 [1:4] 很容易得到这些元素: >>> l = [1,2,3,4,5] >>> l[1:4] [2, 3, 4] 如果我想要列表的其余部分,我可以
这个问题在这里已经有了答案: How can I remove a specific item from an array? (138 个回答) 关闭8年前。 JavaScript push(); 方
在此先感谢您的帮助。这是一个很棒的社区,我在这里找到了许多编程答案。 我有一个包含多个列的表,其中5个包含日期或null。 我想编写一个本质上将5列合并为1列的sql查询,条件是如果5列中的1包含“N
我使用 hasClass() 在 if 语句中验证元素是否具有给定的类。 如果元素没有给定的类,如何检查 if 语句?预先感谢您的回复。 最佳答案 为什么不简单地: if (!el.hasClass(
我有一个 std::vector v我想防止进一步写入它。 C++ 编译器不接受这个 const std::vector& w = v; 但它接受这个 const std::vector& w = r
这个问题已经有答案了: How to reshape data from long to wide format (14 个回答) 已关闭 7 年前。 我有像这样的巨大数据框: SN = c(1:10
如何将可调用(匿名函数)转换为字符串进行评估? 我正在尝试在 phpunit 中编写使用 runkit 的单元测试覆盖方法。特别是,runkit_method_redefine() 需要一个字符串参数
我想实现一个堆栈(队列),许多用户可以以 FILO 方式将其推送(),并且许多用户可以从中弹出()。 是否有与 pop() 等效的方法来检索/删除列表的最后一项? 例如: var popRef = f
我想知道“无状态协议(protocol)”的反面是什么。例如,鉴于 HTTP 是无状态的,那么像 FTP 这样的协议(protocol)是相反的/维护状态的协议(protocol),我的假设是否正确?
我对array_filter很熟悉,想往功能上想,但我想知道有没有办法保留被丢弃的值?例如,如果我有一个像这样的数组: 2; }); 结果将是:array( 3, 4 )。 有没有办法保留丢弃的值
我已将色轮的图像加载到 Canvas 上,并且在数组中有一个色相值列表。我遍历 Canvas 上的每个像素,并删除匹配相同色相值的像素。 该代码是: var element = document.ge
这个问题在这里已经有了答案: Repeat each row of data.frame the number of times specified in a column (10 个答案) 关闭
如何将可调用(匿名函数)转换为字符串以进行评估? 我正在尝试在使用 runkit 的 phpunit 中编写单元测试覆盖方法。特别是,runkit_method_redefine() 需要一个字符串参
我对array_filter很熟悉,想往功能上想,但我想知道有没有办法保留被丢弃的值?例如,如果我有一个像这样的数组: 2; }); 结果将是:array( 3, 4 )。 有没有办法保留丢弃的值
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我是一名优秀的程序员,十分优秀!