带有只读变量

时间:2018-08-17 20:57:44

标签: bash shell

这按预期工作:

#!/bin/bash
set -ex
V="$(cat non-existant-file)"
echo "var V: $V"

由于“ set -e”,脚本在第3行失败,并且不执行第4行而退出。

现在,小的变化:

#!/bin/bash
set -ex
readonly V="$(cat non-existant-file)"
echo "var V: $V"

现在脚本执行第4行。 在sh中运行脚本时,行为相同。

1 个答案:

答案 0 :(得分:3)

这是因为readonly V="$(cat non-existant-file)"行不是简单的分配:它是分配失败的组成,其次是指令readonly V,成功了。

这解释了您观察到的行为,并且@codeforester指出的文档BashFAQ/105中的类似构造(local)也提到了Bash陷阱。

因此,如果尝试改用以下代码,则应遵守预期的行为:

#!/bin/bash
set -ex
V=$(cat non-existant-file)
readonly V
echo "var V: $V"

次要评论:

  • 我更正了应该是#!/usr/bin/env bash#!/bin/bash而不是!#/bin/bash

  • 的shebang
  • 我将V="$(cat non-existant-file)"替换为V=$(cat non-existant-file),因为此处不需要引号。