我希望能够捕获命令替换的确切输出,包括尾随的换行符。
我意识到默认情况下它们会被剥离,因此可能需要进行一些操作才能保留它们,并且我想保留原始退出代码。
例如,给定一个带有可变数量的尾随换行符和退出代码的命令:
f(){ for i in $(seq "$((RANDOM % 3))"); do echo; done; return $((RANDOM % 256));}
export -f f
Run Code Online (Sandbox Code Playgroud)
我想运行类似的东西:
exact_output f
Run Code Online (Sandbox Code Playgroud)
并有输出:
Output: $'\n\n'
Exit: 5
Run Code Online (Sandbox Code Playgroud)
我对bash
POSIX 和 POSIX都感兴趣sh
。
我不确定如何使用csh
字符串匹配语法来表达这一点。我想测试一个 csh 变量是否包含换行符。我基本上在寻找:
if ($mystr !~ <pattern for strings which contain a newline character>)
Run Code Online (Sandbox Code Playgroud)
编辑:在我的特殊情况下,我正在尝试制作这样的字符串:
1234ABC
Run Code Online (Sandbox Code Playgroud)
像这样的字符串失败:
1234ABC
-------
FOOBAR
Run Code Online (Sandbox Code Playgroud)
这些是sed
命令的输出,即sed '1d;$d'
. 不确定这是否重要。
我试图检测换行符而不是" -------"
为了防止我正在解析的文件格式发生变化的原因。(无论如何,我认为我对文件所做的事情并不重要,因为我只是在寻找检测换行符的通用解决方案。)
我正在 tcsh 中编写一个简单的脚本(显然这是一个坏主意,但很好)来从文本文件中 grep 一些模式。假设我们有一个文件animal_names.txt
,其中包含:
dog carrot
dog bolt
cat larry
cat brownies
bird parry
bird pirate
Run Code Online (Sandbox Code Playgroud)
我写了脚本:
set animals = "dog\|cat"
set names = `grep $animals animal_names.txt`
echo "$names"
Run Code Online (Sandbox Code Playgroud)
目的是用“dog”或“cat”来grep所有行。但是,我得到的输出只是一行:
dog carrot dog bolt cat larry cat brownies
Run Code Online (Sandbox Code Playgroud)
不知何故,换行符在输出中被删除。有没有办法保留换行符?另一篇文章建议使用 :q 修饰符,但它在我的情况下不起作用。