我有一個Bash的變量,$word
,有時一個單詞或句子,如:如何獲取Bash變量中的第一個字母?
word="tiger"
或者:
word="This is a sentence."
我怎樣才能讓一個新的Bash變量等於只在變量中找到第一個字母?例如,上面的是:
echo $firstletter
t
或者:
echo $firstletter
T
我有一個Bash的變量,$word
,有時一個單詞或句子,如:如何獲取Bash變量中的第一個字母?
word="tiger"
或者:
word="This is a sentence."
我怎樣才能讓一個新的Bash變量等於只在變量中找到第一個字母?例如,上面的是:
echo $firstletter
t
或者:
echo $firstletter
T
initial="$(echo $word | head -c 1)"
每次你說 「第一次」 在您的問題描述時,head
是一個可能的解決方案。
word="tiger"
firstletter=${word:0:1}
正是我在找的東西。單線,不產生子殼。拿我的投票! – 2015-06-25 14:54:34
word=something
first=${word::1}
這將是美好的,但不適用於我,既不bash 4.3.11也不zsh 5.0.5 – yoniLavi 2016-03-29 16:59:56
隨着GNU bash v4.3.11,'first'被設置爲字母's'。你可以用'echo $ s'來看它。如果這不適用於您,並且您希望幫助調試,請複製並粘貼您輸入的命令及其輸出。 – 2016-03-30 18:54:33
感謝亞當,我的壞,我不明白爲什麼它不適合我以前,但它現在在我試過的幾個版本的bash上完美地工作,回到GNU bash,v3.1.0。 仍然無法在zsh中工作,但問題被標記爲「bash」,所以這是無關緊要的。 – yoniLavi 2016-03-31 01:37:36
既然你這裏有一個sed
標籤是sed
答案:
echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
播放由遊戲爲那些誰喜歡那些(我做的!):
{
s
:啓動程序的替代
/
:啓動指定什麼是要取代^\(.\)
:在第1組捕獲的第一個字符.*
:,確保該行的其餘部分將在替代/
:啓動指定替換\1
:插入第1組/
:其餘的被丟棄;
q
:退出sed
,所以它不會,如果有任何重複此塊其他線路。}
嗯,這很有趣! :)
你也可以使用grep
等,但如果你在bash
${x:0:1}
magick仍然是更好的解決方案imo。(我花了有一個小時試圖使用POSIX變量擴展到這樣做,但不能:(
)
我在這裏發佈了POSIX解決方案:https://stackoverflow.com/a/44988512/4694621 – 2017-07-08 16:47:39
的便攜式辦法做到這一點是使用parameter expansion (which is a POSIX feature):
word='tiger'
first="${word%%"${word#?}"}"
使用bash 4:
x="test"
read -N 1 var <<< "${x}"
echo "${var}"
請注意,POSIX標題中沒有'-c'選項:。 –
gioele
2015-01-09 10:02:13
這確實會返回第一個字母,但這是一個矯枉過正的問題,並且解決方案取決於外部實用程序(頭部)。這可以在更純淨的純殼體中完成。 – automatthias 2016-10-07 09:51:52
這不應該是被接受的答案,因爲上述評論指出的原因。真正的答案如下:'$ {word:0:1}'或'$ {word :: 1}'。 – noamtm 2016-12-08 07:37:16