bash - if 语句使用“sed”设置变量不起作用
问题描述
我正在尝试获取一个 if 语句来读取最后一行为 0 的文本文件 (tmp.txt) 的第一行。“then”命令基本上进入一个目录并在返回之前运行一系列用于 DNA 序列分析的命令,删除 tmp.txt 的第一行并移动到 tmp.txt 中列出的下一个目录。一旦到达所有列出目录的末尾,最后一行将只是“0”或“文件结尾”。问题是,它只是不工作,我不知道为什么。我已经换掉了“then”和“else”命令,以使测试更容易一些。
#!bin/bash/sh
value=`(sed -n 1p tmp.txt)`
if ($value -eq 0)
then
echo "I wish i could eat cheese again"
else
echo "theres still more barcodes left"
fi
解决方案
像这样的括号bash
创建子shell来运行封闭的命令。命令根本不需要它们sed
,它们也不是您在命令中测试值所要寻找的if
。现在运行命令并存储其值的首选方法不是使用反引号,而是$(...)
语法。
对于算术测试,您可以使用双括号((...))
,或者您可以使用[
同义词test
或bash
具有扩展版本[[...]]
。特别是,括号后的空格是必不可少的,因为在这种情况下[
您正在尝试运行该命令[
。
将这些东西放在一起,我们可以像这样更新您的代码段:
#!/bin/bash
value=$(sed -n 1p tmp.txt)
if [[ $value -eq 0 ]]
then
echo "I wish i could eat cheese again"
else
echo "theres still more barcodes left"
fi
(另外,我将 shebang 行固定为指向/bin/bash
,而不是显然命名为/bin/bash/sh
可能不存在的可执行文件)
推荐阅读
- javascript - 为对象内的变量设置状态
- php - ¿如何用php获取XML的数据?
- flutter - Flutter - 合并两个只显示一组值的流
- swift - 单击保存按钮后,让待办事项应用程序更新或刷新
- go - Go 项目不从 github 拉取导入更新
- python - Tried installing FastAi but I got "ERROR: No matching distribution found for torchvision>=0.7"
- c - Using main(int arc, char *argv[])?
- hyperlink - How to include the last word of hyperlink text in TRichEdit in the blue, underline format of the rest?
- c - Function return via pointer doesn't work correctly
- javascript - NodeJS createWriteStream JavaScript heap out of memory