私はBash変数を持っています、 $word
これは時々単語や文です。例:
word="tiger"
または:
word="This is a sentence."
変数にある最初の文字だけに等しい新しいBash変数を作成するにはどうすればよいですか?たとえば、上記は次のようになります。
echo $firstletter
t
または:
echo $firstletter
T
回答:
initial="$(echo $word | head -c 1)"
問題の説明で「最初に」と言うたびに、head
解決策になる可能性があります。
${word:0:1}
または${word::1}
。
echo "$word" | fold -w1 | head -n 1
、 printf '%.1s' "$X"
またはprintf '%c' "$X"
これらは、すべてのシングルVの対象となっている。マルチバイト文字ペテン。
head -c n
、おっと。 echo "fábio" | head -c 2
を与えるf�
ので、これは別の問題だと思います。
word="tiger"
firstletter=${word:0:1}
word=something
first=${word::1}
first
、文字に設定されs
ます。あなたはそれをで見ることができますecho $s
。それでも問題が解決せず、デバッグのサポートが必要な場合は、入力したコマンドとその出力をコピーして貼り付けてください。
これを行うための移植可能な方法は、パラメーター展開(POSIX機能)を使用することです。
$ word='tiger'
$ echo "${word%"${word#?}"}"
t
sed
ここにタグがあるので、sed
答えは次のとおりです。
echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
それらを楽しむ人のために遊びごとに遊ぶ(私はそうする!):
{
s
:置換ルーチンを開始します
/
:何を置き換えるかを指定し始める^\(.\)
:グループ1の最初のキャラクターをキャプチャします.*
:、行の残りの部分が置換されることを確認してください/
:置換の指定を開始します\1
:グループ1を挿入/
:残りは破棄されます;
q
:終了しsed
て、他の行がある場合にこのブロックが繰り返されないようにします。}
楽しかったです!などを:)
使用することもgrep
できますがbash
、${x:0:1}
魔術を使用している場合でも、より優れたソリューションimoです。(私はそれを行うためにPOSIX変数拡張を使用しようとして1時間ほど費やしましたが、できませんでした:(
)
-c
POSIXヘッドにはオプションがないことに注意してください:< unix.com/man-page/posix/1/head >。