我有这个示例 bash 命令:
FILE='/tmp/1.txt' echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)
输出是:
file:
Run Code Online (Sandbox Code Playgroud)
为什么输出不包含先前定义的变量 FILE?
当你跑
FILE='/tmp/1.txt' echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)
shell 在执行赋值之前扩展 $FILE 变量,因此假设之前未设置 FILE,您将得到:
FILE='/tmp/1.txt' echo "file: "
Run Code Online (Sandbox Code Playgroud)
您可以通过首先将 FILE 设置为已知值来确认此行为:
FILE="foo"
FILE='/tmp/1.txt' echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)
第二行扩展为:
FILE='/tmp/1.txt' echo "file: foo"
Run Code Online (Sandbox Code Playgroud)
然后,在此命令的上下文中,FILE 的值更改为/tmp/1.txt. 然后shell执行echo "file: foo"
正如@admstg 在他的回复中提到的,你可以这样做:
FILE='/tmp/1.txt'; echo "file: $FILE"
Run Code Online (Sandbox Code Playgroud)
但是这种行为与您最初尝试的行为不同。您最初只在 echo 命令期间设置 FILE ;以上在shell的持续时间内设置它(或直到它被明确取消设置)。
| 归档时间: |
|
| 查看次数: |
17428 次 |
| 最近记录: |