我有以下条件,其中值如下。
emp_name="Sid"
emp_id=1234
emp_hobby=""
emp_likes="swimming"
emp_dislikes=""
emp_summary="emp_name:$emp_name,emp_id:$emp_id,emp_hobby:$emp_hobby,emp_likes:$emp_likes,emp_dislikes:$emp_dislikes"
如果我用作为示例提供的值在上面回显,它将给出结果为
"emp_name:"Sid",emp_id:1234,emp_hobby:,empf_likes:"swimming",emp_dislikes:"
我需要动态代码的帮助,如果其中任何一个值为 null,则从 echo 中删除完整变量,如下所示
"emp_name:"Sid",emp_id:1234,emp_likes:"swimming"
我试过 {parameter:+word} 返回值但不确定如何处理变量名本身。
您可以使用
${parameter:+word}
扩展,只需将静态部分(变量名)也放在右侧:请注意,您在问题中显示的方式还有一个问题:逗号。您可以使用
"${emp_name:+emp_name:$emp_name}"
,但如果对所有变量都这样做,则行尾将有一个逗号。${str%,}
如果先将字符串存储在变量中,则可以将其删除str
。但是,对所有变量执行此操作有点重复。如果您使用的是 Bash,则可以使用 namerefs 指向变量,并将文本收集到字符串变量中:
使用您的价值观,将打印
emp_name:Sid,emp_id:1234,emp_likes:swimming
. shell 中的字符串变量和数值变量之间通常没有区别,如果你想在值周围加上引号或类似的东西,你将不得不做其他事情。在 Bash 中,您可以使用printf %q
, 或${var@Q}
以适合 shell 输入的格式获取值,即所有嵌入的引号也正确转义。您也可以在那里使用关联数组而不是一堆自变量。
(Bash 必须
declare -i
将变量转换为整数,但它仍然打印与字符串相同的内容,而且我认为没有一种简单的方法可以确定变量是字符串还是整数。)