分页: 1 / 1
求助贴,关于SHELL变量的赋值
发表于 : 2011-05-19 22:05
由 nothing9k
在一个软件源码的发布包里,发现一个configure。其内容如下:
代码: 全选
$ cat configure
#! /bin/sh
# run the automatically generated configure script
CONFIG_STATUS=auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
result=$?
# Stupid autoconf 2.5x causes this file to be left behind.
if test -f configure.lineno; then rm -f configure.lineno; fi
exit $result
关于这段SHELL代码里面,CONFIG_STATUS变量的赋值,本人是在看不懂。
不知有没高人能够指点一二?
Re: 求助贴,关于SHELL变量的赋值
发表于 : 2011-05-19 22:10
由 eexpress
\是分行,其他是命令和参数。还有一些bash的字符串处理,{}那些,是bash的缺省赋值的写法。
Re: 求助贴,关于SHELL变量的赋值
发表于 : 2011-05-19 22:21
由 nothing9k
eexpress 写了:\是分行,其他是命令和参数。还有一些bash的字符串处理,{}那些,是bash的缺省赋值的写法。
你好,谢谢你的回复。
\ 这个代表分行,
那么整个语句应该是
代码: 全选
CONFIG_STATUS=auto/config.status auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
如果暂时不管" "$@" --srcdir="${srcdir:-.}" --cache- "这些东西,那么整个语句应该是:
代码: 全选
CONFIG_STATUS=auto/config.status auto/configure
那么如何去看懂这个呢?
为此我还写了测试程序:
代码: 全选
$ cat configure
#!/bin/sh
CONFIG_STATUS=./test_1.sh \
./test_2.sh "$@"
echo CONFIG_STATUS is ${CONFIG_STATUS}
result=${?}
echo result is ${result}
exit ${result}
$ cat test_1.sh
#!/bin/bash
echo "This is generated by script test_1.sh"
$ cat test_2.sh
#!/bin/bash
echo "This is generated by script test_2.sh"
$ ./configure
This is generated by script test_2.sh
CONFIG_STATUS is
result is 0
我看到的结果是test_1.sh根本不执行,而CONFIG_STATUS也没有赋值成功。
心里为这纠结了好久。

Re: 求助贴,关于SHELL变量的赋值
发表于 : 2011-05-20 1:07
由 死亡阴影
auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
$@ 表示命令行上输入的所有参数串,认为每个参数都一个单独的单词
应该是
auto/config.status auto/configure $@
而--srcdir="${srcdir:-.}" --cache-file=auto/config.cache 都是参数不影响执行
估计要测就要看$@是否有要求了吧
随便侃的

Re: 求助贴,关于SHELL变量的赋值
发表于 : 2011-05-21 18:59
由 fnan
CONFIG_STATUS=auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
先看看这个例子:
kose5@kose5-Aspire-4552:~$ a=12 echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
kose5@kose5-Aspire-4552:~$ a=12; echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
12
kose5@kose5-Aspire-4552:~$
所以个人十分厌恶这种装B写法。实际等效写法为:
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache # CONFIG_STATUS=auto/config.status
Re: 求助贴,关于SHELL变量的赋值
发表于 : 2011-05-21 19:06
由 lilydjwg
fnan 写了:CONFIG_STATUS=auto/config.status \
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
先看看这个例子:
kose5@kose5-Aspire-4552:~$ a=12 echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
kose5@kose5-Aspire-4552:~$ a=12; echo ok
ok
kose5@kose5-Aspire-4552:~$ echo $a
12
kose5@kose5-Aspire-4552:~$
所以个人十分厌恶这种装B写法。实际等效写法为:
auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache # CONFIG_STATUS=auto/config.status
看不出来。