我正在编写一个简单的脚本,通过使用下面的代码来分割包含某些文本的变量:
#!/bin/sh
SAMPLE_TEXT=hello.world.testing
echo $SAMPLE_TEXT
OUT_VALUE=$SAMPLE_TEXT | cut -d'.' -f1
echo output is $OUT_VALUE
我希望输出为output is hello
,但是当我运行此程序时,我的输出为output is
。请让我知道我在哪里做错了?
答案 0 :(得分:4)
要评估命令并将其存储到变量中,请使用var=$(command)
。
总之,你的代码就像这样:
SAMPLE_TEXT="hello.world.testing"
echo "$SAMPLE_TEXT"
OUT_VALUE=$(echo "$SAMPLE_TEXT" | cut -d'.' -f1)
# OUT_VALUE=$(cut -d'.' -f1 <<< "$SAMPLE_TEXT") <--- alternatively
echo "output is $OUT_VALUE"
另外,请注意我在附近添加引号。这是一个很好的做法,可以帮助你。
其他方法:
$ sed -r 's/([^\.]*).*/\1/g' <<< "$SAMPLE_TEXT"
hello
$ awk -F. '{print $1}' <<< "$SAMPLE_TEXT"
hello
$ echo "${SAMPLE_TEXT%%.*}"
hello
答案 1 :(得分:4)
fedorqui的答案是正确的答案。只是添加另一种方法......
$ SAMPLE_TEXT=hello.world.testing
$ IFS=. read OUT_VALUE _ <<< "$SAMPLE_TEXT"
$ echo output is $OUT_VALUE
output is hello
答案 2 :(得分:2)
只是为了扩展@ anishane对自己答案的评论:
$ SAMPLE_TEXT="hello world.this is.a test string"
$ IFS=. read -ra words <<< "$SAMPLE_TEXT"
$ printf "%s\n" "${words[@]}"
hello world
this is
a test string
$ for idx in "${!words[@]}"; do printf "%d\t%s\n" $idx "${words[idx]}"; done
0 hello world
1 this is
2 a test string