Bash使用if else单行命令设置变量不生效问题咨询
问题原因
你原来的命令报错是因为 Bash单行if语法缺少必要的分号分隔符:单行书写if结构时,条件判断结束、then关键字之前必须加;分隔,各执行语句之间也需要用;分隔。
修正方案
方案1:修正原有if写法
把缺少的分号补上即可正常运行:
TOKEN=$(if [[ $TOKEN ]]; then echo "$TOKEN"; else cat ./cloud/token; fi)
方案2:用Bash内置参数扩展(更简洁高效)
Bash内置的参数扩展语法完全可以实现你的需求,无需额外写if判断,执行效率更高:
TOKEN=${TOKEN:-$(<./cloud/token)}
语法说明:
${VAR:-DEFAULT}是Bash的标准参数扩展规则:如果变量VAR未设置或者值为空,就返回后面的DEFAULT值,否则返回变量本身的值,正好匹配你的需求。$(<./cloud/token)是Bash内置的读取文件内容的写法,等价于cat ./cloud/token,但不用额外调用外部cat命令,性能更好。
可选优化
如果要兼容./cloud/token文件不存在的场景,可以加存在性判断:
TOKEN=${TOKEN:-$(test -f ./cloud/token && <./cloud/token || echo "")}
内容的提问来源于stack exchange,提问作者basickarl
相关产品推荐
相关产品推荐

