我正在尝试打印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
答案 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"
在等号周围加上空格会导致错误。这是一个很好的 在为变量赋值时引用内容字符串的习惯: 这样可以减少出错的可能性。
答案 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进行切割。