我正在编写一个简单的脚本,该脚本使用以下代码拆分一个包含一些文本的变量:
#!/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
。请让我知道我哪里做错了?
要计算命令并将其存储到变量中,请使用 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
fedorqui 的答案是正确的答案。只是添加另一种方法...
$ SAMPLE_TEXT=hello.world.testing
$ IFS=. read OUT_VALUE _ <<< "$SAMPLE_TEXT"
$ echo output is $OUT_VALUE
output is hello
只是为了扩展@anishane对他自己的答案的评论:
$ SAMPLE_TEXT="hello world.this is.a test string"
$ IFS=. read -ra words <<< "$SAMPLE_TEXT"
$ printf "%sn" "${words[@]}"
hello world
this is
a test string
$ for idx in "${!words[@]}"; do printf "%dt%sn" $idx "${words[idx]}"; done
0 hello world
1 this is
2 a test string