使用IFS以逗号分隔,在第一次arg读取后结束

时间:2013-06-21 16:03:04

标签: bash unix

我有一个像:

TOPICS=A,B,C,D

一个bash脚本来读取它们:

ssh user@host2 <<EOF
 IFS=$','
 for word in $TOPICS; do
  $PATH_TO_SCRIPT \$word
 done
exit
EOF

但$ PATH的脚本只是为TOPIC'A'调用,然后循环退出,不知道发生了什么?

2 个答案:

答案 0 :(得分:2)

ssh user@host2 <<EOF
 IFS=$','
 RTOPICS='$TOPICS'
 for word in \$RTOPICS; do
  $PATH_TO_SCRIPT \$word
 done
exit
EOF

您需要在远程系统上进行变量扩展,以便使用IFS来分割单词。

答案 1 :(得分:0)

由于您在本地计算机上有变量(这是我在问题中假设的),请在本地计算机上进行扩展:

TOPICS=A,B,C,D
IFS=, read -ra topic_words <<< "$TOPICS"

ssh user@host2 <<EOF
 for word in ${topic_words[*]}; do
  $PATH_TO_SCRIPT \$word
 done
exit
EOF

如果$ TOPICS中有空格,这将会中断。如果是这样的话,那么:

TOPICS="A a,B b,C c,D d"

ssh user@host2 <<EOF
 IFS=, read -ra topic_words <<< "$TOPICS"
 for word in "\${topic_words[@]}"; do
  $PATH_TO_SCRIPT "\$word"
 done
exit
EOF

我假设你的远程端的登录shell是bash。