2013-02-18 127 views
0

我是bash脚本的新手,想知道如何执行以下操作。基本上我有以下线基本的bash脚本参数

./application [channels] -> [message] 

我想将这些存储到2'bash变量与' - >'作为分隔符。

即:

$频道=频道 $消息=消息

此外,可以是由,和/或空格分隔多个信道。所以整行应该是这样的:

./application Channel1,Channel2,Channel3 - >这是一条消息。

现在在bash中,我希望存储在通道数组中的通道由,分开(并且如果存在空格,则除去空格)并将消息存储在消息变量中。我现在唯一可以放在一起的是:

#!/bin/bash 
for i 
    do 
     echo $i 
    done 

有人可以帮我吗?

+0

不能使用' - >'作为命令行的一部分(除非你引用它或转义'>'),因为bash会将'> message'部分解释为输出重定向,并且不会将它传递给脚本。 – 2013-02-18 06:51:06

回答

0

因为你可能在你的信息空间,让你的论据报价,而你保持简单:

for CHANNEL in $(echo $1 | tr " ," "\n") 
do 
    echo Channel: ${CHANNEL} 
done 

echo Message: ${2} 

例子:

[email protected]:~/dev/so$ bash example.sh "channel1 channel2 channel3" "this is the message" 
Channel: channel1 
Channel: channel2 
Channel: channel3 
Message: this is the message 
+0

非常感谢你的回答。 有没有办法做一个使用检查,以便它只接受这个命令,如果它的格式为 example.sh“”“” - 即它需要“”并且通道之间还有空格分开。 – 2013-02-18 21:34:56

+0

还有 - 如果用户有评论,其中包括“”“”字符..不会破坏代码..即 bash example.sh“channel1 channel2”“这是你的评论” – 2013-02-18 21:38:54

+0

你可以用' \“''所以,用参数''channela channelb channelc'”这是一个\“message \”“'对于您将看到的第二个参数'消息:这是一个”消息“ – Anew 2013-02-18 23:21:11