我看到很多片段:
SOME_LONG_VARIABLE_NAME=whatever_value
export SOME_LONG_VARIABLE_NAME
我想知道为什么人们不这样做:
export SOME_LONG_VARIABLE_NAME=whatever_value
我的问题:
export VAR=value
语法?即,它是便携式的吗?答案 0 :(得分:1)
答案 1 :(得分:1)
“便携式”与“是POSIX”的问题不完全相同。 export var=value
由POSIX指定,但如果您定位更广泛的所有(当前和旧版)Bourne类shell,则它不可移植。
我不知道供应商目前是否有任何不允许使用此语法的系统。但同样,“目前正在销售的系统”和“目前正在运行的系统”是不同的问题。我们需要一些AIX,HP-UX,Solaris等的实际用户来停下来告诉我们......
您可以通过以下任何原因找到使用两步“分配然后导出”的脚本:
/bin/sh
expr
来查看此类人员的算术,并且可能会出现神秘的构造${1+"$@"}
。答案 2 :(得分:0)
这不是答案,但我想提一下我刚刚发现的以下问题。
以下代码段在bash中的行为与在dash中的行为不同:
names="one two three"
export BOBO=$names
ls
,echo
,...),在命令看到它之前执行变量扩展。破折号中的命令实际上是export BOBO=one two three
。(要使短划线像bash一样,我们需要在引号中写"$names"
。或者首先不要使用export var=val syntax
。)
[{1}} 存在同样的问题(不在POSIX中,顺便说一下):如果你想让破折号将其作为句柄处理,你需要将local var=$val
括在引号中预期
考虑到流行系统中的$val
(如Ubuntu)实际上是破折号,这是一个巨大的问题。 (我想知道为什么我没有听说过它!)
编辑:
我看到"Are quotes needed for local variable assignment?"中讨论了这个问题。