我在一个bash脚本中面临问题,因为我打印了一个变量的值,然后使用该变量作为另一个变量的输入,但是值没有得到打印,因为据我所知我已经为变量赋值然后可以打印。 所以我想知道我可以同时定义和打印变量值,并将值存储在函数范围内的另一个变量中。
对于前。
a="My name is Vikas"
echo "a=My name is Vikas"
b="${a} Singh"
echo "b=${a} Singh"
但我想做以下
echo "a=My name is Vikas"
echo "b=${a} Singh"
所以输出应该像
a=My name is Vikas
b=My name is Vikas Singh.
请帮忙
答案 0 :(得分:4)
在案例变量尚未设置的情况下进行扩展时可以完成赋值
a= b=
echo "a=${a:=My name is Vikas}"
echo "b=${b:=${a} Singh}"
$ {参数:=字} 如果参数未设置或为null,则将字的扩展分配给参数。然后替换参数的值。不能以这种方式分配位置参数和特殊参数。
一段时间之后,我意识到这可能会产生误导:它是echo "a=.."
正在进行分配但是扩展,这使我能够以不同的方式理解问题,分配(像任何其他命令一样)可以跟{{1}进行跟踪。 1}}或set -x
(撤消set -o xtrace
或set +x
)(另一个类似选项set +o xtrace
或set -v
在展开前显示命令)
set -o verbose
将在扩展到(文件描述符2)标准错误后写入赋值。
答案 1 :(得分:3)
您当然可以将变量的内容打印到另一个变量中。要打印的命令是printf
,选项-v
将打印到变量。从手册页:
printf [-v var] format [arguments]
Write the formatted arguments to the standard output under the control of
the format. The -v option causes the output to be assigned to the vari-
able var rather than being printed to the standard output.
因此...
$ fname="Vikas"; lname="Singh"
$ printf -v a 'My name is %s' "$fname"
$ printf -v b '%s %s' "$a" "$lname"
$ printf '%s\n%s\n' "$a" "$b"
My name is Vikas
My name is Vikas Singh
但是如果您希望输出包含变量名称,则应该使用declare -p
:
$ declare -p a b
declare -- a="My name is Vikas"
declare -- b="My name is Vikas Singh"
通过使用declare -p
,您的输出可以作为输入再循环,以便将来重新创建相同的变量。
答案 2 :(得分:2)
我认为你试图做这样的事情。
b="${a='My name is Vikas'} Singh"
echo $a
echo $b
花括号{
和}
中的命令在当前shell中设置变量a
,外部分配设置b
。
编辑:实际上,正如Nauhel指出的那样,不应该设置变量。所以它应该以{{1}}开头。