ins*_*r-g 9 bash shell arguments command-line-arguments
在"升级"到Mavericks和Xcode 5后,我遇到了各种小问题,以使Xcode编译我的一些旧项目.
似乎Xcode正在向ld链接器传递一个新参数,并且实际上并没有阻止Xcode这样做.ld由于各种原因我需要的旧版本在看到它不知道的参数时会出错(因此我的项目无法编译).
我需要的是在我的旧版本上使用瘦包装ld来删除某些情况下的"坏"参数.我认为bash shell脚本是完美的,但bash不是我的强项.
这是我得到的:
# Look for conditions necessary to use older ld
... # (placeholder, obviously)
# Run older ld (pseudo condition)
if [ <old_ld_condition> ]; then
ARGS=''
for var in "$@"; do
# Ignore known bad arguments
if [ "$var" = '-dependency_info' ]; then
continue
fi
ARGS="$ARGS $var"
done
/path/to/old/ld "$ARGS"
else
/path/to/new/ld "$@"
fi
Run Code Online (Sandbox Code Playgroud)
但是,运行会/path/to/old/ld "$ARGS"导致ld将整个$ARGS字符串解释为一个参数.运行/path/to/old/ld $ARGS结果ld接收以前转义的字符串的未转义版本.
显然,我误解了一些关于它的性质$@,如何操纵它,以及如何将这种操纵传递给年长者ld.感谢大家.
anu*_*ava 12
这应该工作:
# Run older ld (pseudo condition)
if [ <old_ld_condition> ]; then
ARGS=()
for var in "$@"; do
# Ignore known bad arguments
[ "$var" != '-dependency_info' ] && ARGS+=("$var")
done
/path/to/old/ld "${ARGS[@]}"
else
/path/to/new/ld "$@"
fi
Run Code Online (Sandbox Code Playgroud)
如果你真的想继续使用 bash,你应该使用 Bash Arrays :
declare -a ARGS
for var in "$@"; do
# Ignore known bad arguments
if [ "$var" = '-dependency_info' ]; then
continue
fi
ARGS[${#ARGS[@]}]="$var"
done
Run Code Online (Sandbox Code Playgroud)
现在"${ARGS[@]}"可以像"$@". man bash想要查询更多的信息。
| 归档时间: |
|
| 查看次数: |
5941 次 |
| 最近记录: |