有没有简单的方法来“加入”传递给脚本的参数?我想要类似于$@
的东西,但是它会立即传递参数。
例如,请考虑以下脚本:
$/bin/bash
./my_program $@
当被称为
时./script arg1 arg2 arg3
my_program
将接收3个独立参数的参数。我想要的是将所有参数作为一个参数传递,加入它们 - 用空格分隔,比如调用:
./my_program arg1\ arg2\ arg3
答案 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
答案是我想用更高级的脚本对结果进行一些后处理。因此,我需要能够将所有传递的参数(模式)压缩为单个字符串。这就是这里的关键部分。
的康拉德强> 的