2016-11-15 41 views
0

我想打印域後可變分配到另一個topLeveldomain變量(example.com)bash的操作

$line = example.com 

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

然而,當我嘗試回聲$域,它不會顯示所需的值

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

請謹慎使用'=' – Djee

+1

之前的空格請參閱:http://www.shellcheck.net/ – Cyrus

回答

2

我建議:

line="example.com" 

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

各地=刪除空格:

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

當你創建一個變量,不prepe ND $到變量名:

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 
+0

請參閱:[正確的Bash和shell腳本可變大小](http://stackoverflow.com/a/ 673940/3776858) – Cyrus

+1

@Cyrus:謝謝你指出。更正(和學習)。 ^^ – Peque

1

正確的代碼應該是:

line="example.com" 

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

考慮到bash正確的語法:

variable=value 

,如果你要使用的變量的內容(有沒有允許空白)

你必須添加一個領先$ 例如

echo $variable 
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 
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是一個內置變量,用於保存輸入字段的數量。

問題與您的代碼

與您的代碼的問題是由於無效的語法。

要設置一個變量的外殼,使用

VARNAME="value"

插入空格周圍等號會導致錯誤。將值分配給變量時引用內容字符串的習慣是一種很好的習慣: 這樣可以減少出錯的機率。

請參閱Bash Guide for Beginners

0

這也適用:

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

你需要在一開始刪除$從行,修正的空間和回聲,以$線管切割值。也可以用$行進行剪切。