说我有一个Bash功能所以,像这样
function so
{
open https://stackoverflow.com/search?q=$1
}
我从这样的shell调用
jessescott@Jesses-MacBook-Pro:~$ so foo
这给了我https://stackoverflow.com/search?q=foo
现在,如果我要搜索
jessescott@Jesses-MacBook-Pro:~$ so foo bar
这不会捕获'bar',因为参数由空格分隔。
我当然可以在函数中添加$2
,但是我希望能够传递n
-args。
我也可以像这样逃避$1
function so
{
open https://stackoverflow.com/search?q="$1"
}
这需要我去
jessescott@Jesses-MacBook-Pro:~$ so 'foo bar'
...这是可行的,但不是必须记住转义我引号的最佳条件。
我在功能上缺少其他明显的解决方案吗?
答案 0 :(得分:3)
由于您的目标是将所有参数连接在一起成为一个字符串以作为URL传递,因此"$*"
是完成这项工作的工具:
so() { open https://stackoverflow.com/search?q="$*"; }
这使用IFS
中的第一个字母(默认为空格)分隔所有参数。
也就是说,当您的问题可以包含任意文本时,通常这并不安全。考虑改为在stdin上接受输入;例如:
so() {
local title
IFS= read -r -p 'Question title: ' title
[[ $title ]] && open https://stackoverflow.com/search?q="$title"
}
...通过在无法将其解析为shell命令的上下文中读取输入,即使对于诸如How can I safely pass the value assigned with var=$'$(rm -rf ~)\'$(rm -rf ~)\'' on a SSH command line?
答案 1 :(得分:0)
您可以使用 $ @ ,它是所有输入参数的数组。
在您的示例中,它将类似于:
public function store(Request $request, $user_id, $broker_id)
{
$get_item_id = $request->all();
foreach($get_item_id as $data)
{
$store_item = $this->patient->store(array_merge($data, ['user_id' => $user_id], ['broker_id' => $broker_id ]));
}
return response()->json(['success' => true, 'data'=> ['items' => $get_item_id)]],200);
}