Bash将值赋值给变量作为命令替换和打印值输出
我想在Bash中实现这一点:Bash将值赋值给变量作为命令替换和打印值输出,bash,variables,echo,command-substitution,Bash,Variables,Echo,Command Substitution,我想在Bash中实现这一点:echo$(a=1)并打印变量a 我测试了eval,$$a,{},$(),但大多数情况下,它们都不起作用,要么我得到了字面上的a=1,要么在一种情况下(我不记得是哪种情况)它试图执行该值 我知道我能做到:a=1;echo$a但由于我对每行一个命令不感兴趣(即使有时变得有点复杂),我想知道是否可以使用echo或printf来实现这一点,如果您知道$a以前未设置,可以使用以下语法: echo ${a:=1} 此类型以及其他类型的参数扩展在中定义 如果要指定数值,另一个选
echo$(a=1)
并打印变量a
我测试了eval
,$$a
,{}
,$()
,但大多数情况下,它们都不起作用,要么我得到了字面上的a=1
,要么在一种情况下(我不记得是哪种情况)它试图执行该值
我知道我能做到:
a=1;echo$a
但由于我对每行一个命令不感兴趣(即使有时变得有点复杂),我想知道是否可以使用echo
或printf
来实现这一点,如果您知道$a
以前未设置,可以使用以下语法:
echo ${a:=1}
此类型以及其他类型的参数扩展在中定义
如果要指定数值,另一个选项(不取决于之前未设置的值)是使用算术展开:
echo $(( a = 1 ))
这将指定值并回显已指定的编号
值得一提的是,您试图通过设计在子shell中完成的操作无法完成,因为子进程无法修改其父进程的环境。第二次我也看到了它,但如果我使用这种方式(all-in-one命令),它可能是一个字符串。如果不使用
unset
,则第一个选项将使其有用一次:(您可能需要echo${a:-1}
,如果a
未设置(或设置为空字符串),它将使用1
进行扩展,但不设置(或更改)a
@chepner的值。我的意图是为$a
分配一个新值,并打印新值(但我不是100%)@我想我误解了他上面的评论。@TomFenech是的,这就是我想要的。