bash在操作后将变量赋值给另一个

时间:2016-11-15 08:24:43

标签: bash

我正在尝试打印domain和topLeveldomain变量(example.com)

 $line = example.com

 domain =$line | cut -d. -f 1
 topLeveldomain = $line | cut -d. -f 2

但是当我尝试回显$ domain时,它没有显示所需的值

test.sh: line 4: domain: command not found
test.sh: line 5: topLeveldomain: command not found

6 个答案:

答案 0 :(得分:2)

我建议:

line="example.com"

domain=$(echo "$line" | cut -d. -f 1)
topLeveldomain=$(echo "$line" | cut -d. -f 2)

答案 1 :(得分:1)

删除=周围的空格:

line=example.com     # YES
line = example.com   # NO

创建变量时,不要将$添加到变量名称:

line=example.com     # YES
$line=example.com    # NO

使用管道时,需要将标准输出传递给下一个命令。不仅仅意味着,您通常需要echo个变量或cat个文件:

echo $line | cut -d. -f1    # YES
$line | cut -d. -f1         # NO

使用$()语法将命令输出转换为变量:

new_variable=$(echo $line | cut -d. -f1)    # YES
new_variable=echo $line | cut -d. -f1       # NO

答案 2 :(得分:1)

正确的代码应该是:

line="example.com"

domain=$(echo "$line" | cut -d. -f 1)
topLeveldomain=$(echo "$line" | cut -d. -f 2)

考虑bash的正确语法:

variable=value

(不允许空白)

如果你想使用变量的内容你必须添加一个领先的$ e.g。

echo $variable

答案 3 :(得分:1)

您不需要外部工具,只需在bash

中执行此操作即可
$ string="example.com"

# print everything upto first de-limiter '.'
$ printf "${string%%.*}\n"          
example

# print everything after first de-limiter '.'
$ printf "${string#*.}\n"           
com

答案 4 :(得分:0)

我宁愿使用AWK:

domain="abc.def.hij.example.com"
awk -F. '{printf "TLD:%s\n2:%s\n3:%s\n", $NF, $(NF-1), $(NF-2)}' <<< "$domain"

输出

TLD:com
2:example
3:hij

在上面的命令中,-F选项指定字段分隔符; NF是一个内置变量,用于保存输入字段的数量。

您的代码问题

您的代码问题是由于语法无效。

  

要在shell中设置变量,请使用

     

VARNAME="value"

     

在等号周围加上空格会导致错误。这是一个很好的   在为变量赋值时引用内容字符串的习惯:   这样可以减少出错的可能性。

请参阅Bash Guide for Beginners

答案 5 :(得分:0)

这也有效:

 line="example.com"
 domain=$(echo $line | cut -d. -f1)
 toplevel=$(cut -d. -f2 <<<$line)
 echo "domain name=" $domain
 echo "Top Level=" $toplevel

您需要在开头删除$,更正空格并回显$ line以便管道要剪切的值。或者用$ line进行切割。