ゴール
ZSHスクリプトでは、特定の引数について、最初の文字列と残りの文字列を取得したいと考えています。
たとえば、スクリプトに名前が付けられている場合test
sh test hello
h
とを抽出することになっていello
ます。
ZSH マニュアル
http://zsh.sourceforge.net/Doc/zsh_a4.pdf
言います:
添字付けは配列以外の値に対しても実行できます。この場合、添字は抽出する部分文字列を指定します。たとえば、FOO が 'foobar' に設定されている場合、'echo $FOO[2,5]' は 'ooba' を出力します。
Q1
という名前のファイルにシェルスクリプトを書きました。test
echo $1
echo $1[1,1]
ターミナル:
$ sh test hello
hello
hello[1,1]
結果は失敗します。コードの何が問題になっていますか?
Q2
また、n から最後まで subString を抽出する方法もわかりません。おそらく、正規表現で分割された配列を使用する必要がありますか?
編集:Q3
これは別の質問かもしれませんので、新しいスレッドを開始するのが適切であれば、そうします。
@skishore に感謝します ここにさらなるコードがあります
#! /bin/zsh
echo $1
ARG_FIRST=`echo $1 | cut -c1`
ARG_REST=`echo $1 | cut -c2-`
echo ARG_FIRST=$ARG_FIRST
echo ARG_REST=$ARG_REST
if $ARG_FIRST = ""; then
echo nullArgs
else
if $ARG_FIRST = "@"; then
echo @Args
else
echo regularArgs
fi
fi
文字列の値を文字列と比較する方法がわかりませんが、特定の引数についてhello
結果:
command not found: h
コードの何が問題になっていますか?
EDIT2:
私が正しく見つけたもの
#! /bin/zsh
echo $1
ARG_FIRST=`echo $1 | cut -c1`
ARG_REST=`echo $1 | cut -c2-`
echo ARG_FIRST=$ARG_FIRST
echo ARG_REST=$ARG_REST
if [ $ARG_FIRST ]; then
if [ $ARG_FIRST = "@" ]; then
echo @Args
else
echo regularArgs
fi
else
echo nullArgs
fi
EDIT3:
全体の結果として、これが私がこの質問で行ったことです。
https://github.com/kenokabe/GitSnapShot
GitSnapShotは、Git コマンドの ZSH シン ラッパーであり、より簡単に使用できます。