加入参数 - 逃逸空间

时间:2011-06-24 16:50:13

标签: bash arguments

有没有简单的方法来“加入”传递给脚本的参数?我想要类似于$@的东西,但是它会立即传递参数。

例如,请考虑以下脚本:

$/bin/bash

./my_program $@

当被称为

./script arg1 arg2 arg3

my_program将接收3个独立参数的参数。我想要的是将所有参数作为一个参数传递,加入它们 - 用空格分隔,比如调用:

./my_program arg1\ arg2\ arg3

2 个答案:

答案 0 :(得分:13)

使用这个:

./my_program "$*"

答案 1 :(得分:3)

我今天遇到了一个非常类似的问题,想出了这样的代码(包括健全性检查):

#!/bin/sh

# sanity checks
if [ $# -lt 2 ]; then
    echo "USAGE  : $0 PATTERN1 [[PATTERN2] [...]]";
    echo "EXAMPLE: $0 TODO FIXME";
    exit 1;
fi

NEEDLE=$(echo $* | sed -s "s/ /\\\|/g")
grep $NEEDLE . -r --color=auto

这个小脚本允许您在当前目录下的所有文件中递归搜索各种单词。您可以使用sed将“(空格)分隔符”替换为您喜欢的任何内容。我用转义的管道替换了一个空格:“” - > “\ |”生成的字符串可以由grep。

解析

<强>用法

搜索术语“TODO”和“FIXME”:

./script.sh TODO FIXME

您可能想知道:为什么不直接调用grep?

grep "TODO\|FIXME" . -r

答案是我想用更高级的脚本对结果进行一些后处理。因此,我需要能够将所有传递的参数(模式)压缩为单个字符串。这就是这里的关键部分。

康拉德