为什么 Zsh 不给变量赋值而我必须使用 eval?
Why doesn't Zsh assign a value to a variable and I have to use eval?
我不明白 Zsh 中的这种行为:
~ % i=0
~ % date_input=2021-01-01
~ % sqlday${i}=$(date -j -v+${i}d -f "%Y-%m-%d" "$date_input" +%Y-%m-%d)
zsh: command not found: sqlday0=2021-01-01
~ %
为什么提示“找不到命令?”为什么不把变量赋值给 2021-01-01?但是,当我使用 eval:
~ % eval sqlday${i}=$(date -j -v+${i}d -f "%Y-%m-%d" "$date_input" +%Y-%m-%d)
~ % echo $sqlday0
2021-01-01
所以我想我不明白为什么 Zsh 试图将第一条语句作为命令执行,但第二条语句实际上是分配一个变量。
简单变量的赋值形式为
NAME=VALUE
参数扩展发生在 VALUE 内,而不是 NAME 内。这是不必要的。如果你有数组(关联和非关联),为什么要动态生成变量名。
sqlday[$i]=....
如果您将 sqlday
定义为数组,例如 , 会起作用
typeset -a sqlday
UPDATE :没有必要显式声明数组(尽管我认为这是很好的编程习惯)。 Zsh 会从您使用的方式推断出 sqlday
,它必须是一个数组。
我不明白 Zsh 中的这种行为:
~ % i=0
~ % date_input=2021-01-01
~ % sqlday${i}=$(date -j -v+${i}d -f "%Y-%m-%d" "$date_input" +%Y-%m-%d)
zsh: command not found: sqlday0=2021-01-01
~ %
为什么提示“找不到命令?”为什么不把变量赋值给 2021-01-01?但是,当我使用 eval:
~ % eval sqlday${i}=$(date -j -v+${i}d -f "%Y-%m-%d" "$date_input" +%Y-%m-%d)
~ % echo $sqlday0
2021-01-01
所以我想我不明白为什么 Zsh 试图将第一条语句作为命令执行,但第二条语句实际上是分配一个变量。
简单变量的赋值形式为
NAME=VALUE
参数扩展发生在 VALUE 内,而不是 NAME 内。这是不必要的。如果你有数组(关联和非关联),为什么要动态生成变量名。
sqlday[$i]=....
如果您将 sqlday
定义为数组,例如 ,会起作用
typeset -a sqlday
UPDATE :没有必要显式声明数组(尽管我认为这是很好的编程习惯)。 Zsh 会从您使用的方式推断出 sqlday
,它必须是一个数组。