簡體   English   中英

切割后給變量賦值?

[英]Assign value to variable after cut?

作為Unix newbee,我希望解析文件的完整路徑

/Users/E/atsp_0001.tar.gz

0001和分配0001到可變sub_id

解析雖然很笨拙,但它的工作方式如下:

E$ file=/Users/E/atsp_0001.tar.gz
E$ echo ${file##*/} | cut -d "_" -f2 | cut -d "." -f1
0001

然后,我無法將0001分配給這樣的變量:

E$ file=/Users/E/atsp_0001.tar.gz
E$ sub_id=${file##*/} | cut -d "_" -f2 | cut -d "." -f1
E$ echo ${sub_id}

E$

如果有人可以(1)解釋為什么它不起作用以及如何解決它,以及(2)改進笨拙的解析,我將不勝感激。

這是我們的做法。 您可以使用$() 您也可以使用``代替$()但我不建議這樣做。

:~> file=/Users/E/atsp_0001.tar.gz
:~> echo ${file##*/} | cut -d "_" -f2 | cut -d "." -f1
0001
:~> variabletest=$(echo ${file##*/} | cut -d "_" -f2 | cut -d "." -f1)
:~> echo $variabletest
0001

您正在變量分配中執行多項操作,而不是存儲值,這就是為什么它對您不起作用的原因

echo將打印數據,但是您正在執行管道操作,因此只有將其圍起來以將其標記為單個操作后才能起作用。 您的解析是確定的,因為它取決於您的文件命名約定。 但是我會使用基本名稱命令

:~> echo $file
/Users/E/atsp_0001.tar.gz

:~> basename $file
atsp_0001.tar.gz

這將清除路徑。

因此,您可以執行variabletest=$(echo basename $file | cut -d "_" -f2 | cut -d "." -f1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM