【发布时间】:2016-11-01 07:05:22
【问题描述】:
运行test.sh bash 脚本时
#!/bin/bash +x
./test.m $*
以下列方式之一调用test.m GNU Octave 可执行脚本:
./test.sh my argument
./test.sh "my argument"
./test.sh 'my argument'
argv() 将始终解析这两个字符串:
ans =
{
[1,1] = my
[2,1] = argument
}
有没有办法在一个参数中同时获取两个单词,而不需要进一步处理结果?或者换一种说法,分隔符可以和空格不一样吗?
有趣的是,bash 本身确实与第一个调用和其他两个调用有所不同。 $1 在后一种情况下会同时得到两个词,而在第一个中只会得到 'my'。
其次,如果参数在发送到 Octave 脚本之前存储在变量中会怎样:
#!/bin/bash +x
a="$@"
./test.m $a
这将给出相同的结果,两个词:
ans =
{
[1,1] = my
[2,1] = argument
}
使用./test.m "$a"时
#!/bin/bash +x
a="$@"
./test.m "$a"
将具有传递单个字符串的效果,包括所有参数:./test.sh "my argument" other 将 my argument other 打包在一起:
ans =
{
[1,1] = my argument other
}
【问题讨论】:
-
@Suever 抱歉,已更新!