for i in $(xrandr); do echo "$i" ; donefor i in "$(xrandr)"; do echo "$i"; donefor i in "$(xrandr)"; do echo $i; done我明白为什么 1 与 2 不同。但为什么 3 的输出与 2 不同?请解释输出。引号如何在换行符上工作?
跑步时
echo abcd | wc -c
Run Code Online (Sandbox Code Playgroud)
它返回5。
但是这个词abcd只有4个字符长。
被echo打印的字经过一些特殊字符abcd?
我可以阻止echo打印吗?
我想使用netcat向我服务器上的回显服务发送一段文本,获得回复然后退出,以便我知道连接仍然良好。到目前为止,我已经尝试过:
echo 'test' | netcat server 7
Run Code Online (Sandbox Code Playgroud)
这样 netcat 将等待更多输入而不是退出。
netcat从 echo 服务获得回复后如何退出?
如何在文件中输入以下内容:
Hi
abcd
Run Code Online (Sandbox Code Playgroud)
我尝试使用echo "Hi\nabcd" >> ab.txt,但在文件中它按原样编写(\n包括在内,而不是换行符)
如果我有一个包含不可打印字符、换行符或制表符的字符串,有没有办法echo打印这个字符串并显示这些字符的代码(例如,\n换行符、\b退格符)?
我正在练习带有选项\r(回车)的echo 命令,如下所示。
echo -e "This is \r my college"
Run Code Online (Sandbox Code Playgroud)
输出:
my college
Run Code Online (Sandbox Code Playgroud)
但是当我在\r下面再添加一个词时
echo -e "This is the \r my college"
Run Code Online (Sandbox Code Playgroud)
然后它给了我这样的输出:
my college the
Run Code Online (Sandbox Code Playgroud)
另一个例子
echo -e "This is \r valid data"
valid data
echo -e "This is not a \r valid data"
valid data a
Run Code Online (Sandbox Code Playgroud)
所以,我想知道这里回车的实际目的是什么?
我看过几个类似的话题,但他们指的是不引用变量,我知道这可能会导致不需要的结果。
我看到了这段代码,想知道是否可以在这行代码执行时注入一些要运行的东西:
echo run after_bundle
假设我已经声明了以下变量:
$ var='$test'
$ test="my string"
Run Code Online (Sandbox Code Playgroud)
如果我打印它们的内容,我会看到以下内容:
$ echo $var
$test
$ echo $test
my string
Run Code Online (Sandbox Code Playgroud)
我想找到一种方法来打印内容的内容$var(即 的内容$test)。所以我尝试执行以下操作:
$ echo $(echo $var)
$test
Run Code Online (Sandbox Code Playgroud)
但这里的结果是$test而不是"my string"......是否可以使用bash打印变量内容的内容?
有一个脚本(我们称之为echoer)可以打印以筛选一堆信息。我希望只能在找到模式后才能看到线条。
我想象使用解决方案看起来像
echoer | solution_command <pattern>
Run Code Online (Sandbox Code Playgroud)
理想情况下pattern是一个正则表达式,但硬值字符串对我来说就足够了。
在 shell 脚本中...
如何在不剥离任何尾随换行符的情况下将 stdin 捕获到变量?
现在我已经尝试过:
var=`cat`
var=`tee`
var=$(tee)
Run Code Online (Sandbox Code Playgroud)
在所有情况下$var都不会有输入流的尾随换行符。谢谢。
另外:如果输入中没有尾随换行符,则解决方案不得添加.
根据接受的答案更新:
我在代码中使用的最终解决方案如下:
function filter() {
#do lots of sed operations
#see https://github.com/gistya/expandr for full code
}
GIT_INPUT=`cat; echo x`
FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter)
FILTERED_OUTPUT=${FILTERED_OUTPUT%x}
printf '%s' "$FILTERED_OUTPUT"
Run Code Online (Sandbox Code Playgroud)
如果您想查看完整代码,请查看expandr的 github 页面,这是我为信息安全目的开发的一个小的开源git 关键字扩展过滤器shell 脚本。根据.gitattributes文件(可以是特定于分支的)和git config 中设置的规则,无论何时检入或检出存储库,git 都会通过expandr.sh shell 脚本通过管道传输每个文件。(这就是为什么保留任何尾随换行符或缺少换行符至关重要。)这使您可以清理敏感信息,并为测试、暂存和实时分支交换不同的环境特定值集。