处理 bash 脚本参数中的空格
我在处理 bash 脚本中包含空格的参数时遇到问题。
脚本
#!/bin/bash
for i in $*
do
echo "$i"
done
调用(有 2 个参数)
$ ./script.sh "a b" "c"
实际输出(就好像有 3 个参数) 预期输出(就好像有 3 个参数)
a
b
c
预期输出(就好像 有 3 个参数)有 2 个参数)
a b
c
有人可以解释如何获得预期的输出吗?
I am having issues handling arguments that contain white spaces in a my bash script.
The script
#!/bin/bash
for i in $*
do
echo "$i"
done
The call (with 2 arguments)
$ ./script.sh "a b" "c"
The actual output (as if there were 3 arguments)
a
b
c
The expected output (as if there were 2 arguments)
a b
c
Can someone explain how to get the expected output?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将第一行的
$*
更改为"$@"
。Change
$*
to"$@"
on the first line.您想要的是 $@ 作为参数(并且您必须将其括在“”中)而不是 $*。
What you want is $@ for the parameters (and you have to enclose it in "") instead of $*.
回复 2011 年留下的关于如何将每个参数分配给变量的评论...
这个 bash 函数将每个参数分配给数组中的一个项目。然后这些可以在其他地方使用。
该函数查找某种类型的文件,然后对它们进行 grep:
相关行是前 5 行。我们初始化一个数组,循环传递的参数,并将它们分配为数组中的项目。然后函数根据需要引用它们。
通过这种方式,您可以指定可选的第三个参数以在您选择的编辑器中打开文件:
变量 $searchterm 已转义空格,以便 grep 将其作为一个字符串接受。
希望这对某人有帮助!
Replying to the comment left in 2011 on how to assign each argument to a variable...
This bash function assigns each argument to an item in an array. These can then be used elsewhere.
The function in question finds files of a certain type and then greps them:
The relevant lines are the the first 5. We initialise an array, loop over the arguments passed, and assign them as items in the array. These are then referenced by the function as required.
This way you can specify an optional 3rd parameter to open the files in an editor of your choice:
The variable $searchterm has had spaces escaped so that grep will accept it as one string.
Hope this helps someone!