标签: echo

带引号与不带引号的字符串扩展

  1. for i in $(xrandr); do echo "$i" ; done
  2. for i in "$(xrandr)"; do echo "$i"; done
  3. for i in "$(xrandr)"; do echo $i; done

我明白为什么 1 与 2 不同。但为什么 3 的输出与 2 不同?请解释输出。引号如何在换行符上工作?

shell bash echo quoting whitespace

14
推荐指数
1
解决办法
5625
查看次数

为什么“wc -c”用回声打印一个多一的值?

跑步时

echo abcd | wc -c
Run Code Online (Sandbox Code Playgroud)

它返回5
但是这个词abcd只有4个字符长。

echo打印的字经过一些特殊字符abcd

我可以阻止echo打印吗?

echo text-processing wc

14
推荐指数
2
解决办法
8199
查看次数

netcat:发送文本到回显服务,阅读回复然后退出

我想使用netcat向我服务器上的回显服务发送一段文本,获得回复然后退出,以便我知道连接仍然良好。到目前为止,我已经尝试过:

 echo 'test' | netcat server 7 
Run Code Online (Sandbox Code Playgroud)

这样 netcat 将等待更多输入而不是退出。

netcat从 echo 服务获得回复后如何退出?

echo netcat

14
推荐指数
4
解决办法
8万
查看次数

如何从命令行创建多行文件?

如何在文件中输入以下内容:

Hi
abcd
Run Code Online (Sandbox Code Playgroud)

我尝试使用echo "Hi\nabcd" >> ab.txt,但在文件中它按原样编写(\n包括在内,而不是换行符)

echo escape-characters

13
推荐指数
5
解决办法
2万
查看次数

echo -e 的反义词是什么?

如果我有一个包含不可打印字符、换行符或制表符的字符串,有没有办法echo打印这个字符串并显示这些字符的代码(例如,\n换行符、\b退格符)?

shell echo

13
推荐指数
3
解决办法
2300
查看次数

使用 echo 命令回车

我正在练习带有选项\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)

所以,我想知道这里回车的实际目的是什么?

shell echo newlines

13
推荐指数
1
解决办法
7万
查看次数

在没有引号的情况下运行 echo 是否危险?

我看过几个类似的话题,但他们指的是不引用变量,我知道这可能会导致不需要的结果。

我看到了这段代码,想知道是否可以在这行代码执行时注入一些要运行的东西:

echo run after_bundle

shell security echo quoting

13
推荐指数
2
解决办法
7169
查看次数

是否可以使用shell脚本打印变量内容的内容?(间接引用)

假设我已经声明了以下变量:

$ 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打印变量内容的内容?

bash shell-script echo variable-substitution variable

13
推荐指数
3
解决办法
9240
查看次数

找到模式后才打印输出

有一个脚本(我们称之为echoer)可以打印以筛选一堆信息。我希望只能在找到模式后才能看到线条。

我想象使用解决方案看起来像

echoer | solution_command <pattern>
Run Code Online (Sandbox Code Playgroud)

理想情况下pattern是一个正则表达式,但硬值字符串对我来说就足够了。

echo printf

13
推荐指数
2
解决办法
2804
查看次数

如何在不剥离任何尾随换行符的情况下将 stdin 捕获到变量?

在 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 脚本通过管道传输每个文件。(这就是为什么保留任何尾随换行符或缺少换行符至关重要。)这使您可以清理敏感信息,并为测试、暂存和实时分支交换不同的环境特定值集。

shell shell-script echo newlines printf

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