2014-11-04 45 views
0

我有一个这样的脚本:我可以同时放入变量和回显吗?

str=$(echo $'Hello World\n===========\n') 
echo "$str" 

和它的作品!

我可以有这样的事吗?

echo str=$(echo $'Hello World\n===========\n') 
+1

您的流程替换没有意义。代码应该简单地为'str = $'Hello World \ n =========== \ n';回声“$ str”' – tripleee 2014-11-04 07:57:49

+0

@tripleee我想(希望)回声只是真正的程序简化。 – 2014-11-04 08:05:53

回答

2

如果我能猜到你想要什么,如何这样做的过程中替换一个tee

str=$(echo $'Hello world!\n====\n' | tee -a /dev/stderr) 

这有一个明显的缺点,即输出重定向到标准错误。

一个earlier version of this answer评论代码,随后从问题中删除。如果您好奇,请查看编辑历史记录。

+0

我对你的答案感到困惑,因为我们没有阅读同一个问题。问题中没有while循环,没有使用php,没有条件。在问题输出在stdout上完成时,您正在重定向到stderr。 – 2014-11-04 08:15:53

+0

@Maxime我猜测OP在宽限期内编辑了这个问题。我现在看到这可能会有些混乱,但是当我回答时代码就在那里。我同意重定向stderr有点瑕疵,但这是我提出的解决方法的要点。 – tripleee 2014-11-04 08:21:04

+0

太酷了!非常感谢... – Daniyal 2014-11-04 08:51:06

3

在bash中有一个变量扩展可能对您得心应手:

${newvar=value} 

尝试比如这个:

$ unset str 
$ echo "${str=Hello world}" 
Hello world 
$ echo "$str" 
Hello world 

现在你双线例如:

$ unset str 
$ echo "${str=$'Hello World\n===========\n'}" 
Hello World 
=========== 

$ echo "$str" 
Hello World 
=========== 

$ 
0

我认为使用两条指令会更好,因为人们可以忽略它:

str=$(echo $'Hello World\n===========\n'); echo "$str" 
+0

你至少应该在'echo“$ str”'中保留双引号,否则输出将全部在同一行上。 – tripleee 2014-11-04 08:12:11

+0

arg,它正在使用zsh :)谢谢。 – 2014-11-04 08:14:12

+1

'$()'修剪最后一个换行符,所以你提出的命令相当于'str = $'Hello World \ n ===========';回声“$ str”' – 2014-11-04 08:20:05