标签: echo

Linux shell 脚本:意外的变量行为

我有一个$myvar包含两行的变量,我想将其中的第一个放入一个新变量中。

当我尝试:

$ myvar1 = $(echo $myvar | head -n 1) 
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为 echo 不会像我期望的那样输出换行符。

显然我可以这样做:

$ myvar1 = $(echo $myvar | cut -d " " -f 1)
Run Code Online (Sandbox Code Playgroud)

它将工作,因为 echo 的输出在第一行包含一个单词,在第二行包含一个单词。

我有两个问题:

  1. 为什么 echo 打印空格而不是换行符?
  2. 是否有可能使它更容易或更正确(我不是 shell 脚本方面的专业人士,也许我在这里遗漏了一些东西)

shell shell-script string-manipulation echo

3
推荐指数
1
解决办法
223
查看次数

`echo` 在这种情况下如何工作?:`externalip() { curl http://ipecho.net/plain; 回声; }`

在搜索一个简单的 bash 函数来回显我的外部 IP 地址时,我遇到了这篇文章,其中包含以下示例:

function ext-ip () { curl http://ipecho.net/plain; echo; }
Run Code Online (Sandbox Code Playgroud)

我想知道echo在这种情况下是如何工作的;手册页curlecho联机帮助页都不是很有帮助。为什么它会回显上一个curl命令的响应体?与例如相比,以这种方式做有什么好处echo "$(curl -s http://ipecho.net/plain)"吗?我只是问,因为后者的语法似乎更透明/直截了当。

linux bash command-line echo

3
推荐指数
1
解决办法
3029
查看次数

如何将一个文件的内容添加到另一个文件中

这个问题与已经提出的问题有关如何将文本添加到文件开头

丹尼斯威廉姆森建议的答案可以完成这项工作:

echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt

在上面,字符串task goes here被添加到文件的开头。

如果字符串task goes here在名为 的文件中myfile.txt,那么我应该如何更改命令?echo 'myfile.txt'...或者echo myfile.txt...不做这项工作。

bash cat echo

2
推荐指数
1
解决办法
1624
查看次数

为什么不“回声 $?” 在“&&”中使用时,在它之前打印命令的退出代码?

假设我有这个简单的 C 程序,它向 shell 返回 4。

int main()
{
  return 4;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它,然后做echo $?,我会得到4,这是预期的

$ gcc foo.c && ./a.out
$ echo $?
4               <<<< expected
Run Code Online (Sandbox Code Playgroud)

但是当我执行以下操作时,我什么也没得到

$ gcc foo.c && ./a.out && echo $?
$             <<<< Nothing - WHY????
Run Code Online (Sandbox Code Playgroud)

bash echo exit-code

2
推荐指数
1
解决办法
832
查看次数