だから私は入力行を反転するためにこのスクリプトを見つけました。
#! /bin/bash
input="${1}"
reverse=""
len=${#input}
for(( i=${len}-1; i>=0; i-- ))
do
reverse="$reverse${input:${i}:1}"
done
echo "$reverse"
#inputとforループの機能を説明できる人はいますか?
答え1
単純化すると、スクリプトは次のようになります。
#! bin/bash
input="${1}" reverse=""
for (( i=0; i<${#input}; i++ ))
do reverse="${input:${i}:1}$reverse"
done
echo "$reverse"
上記のコードを:というファイルに入れてscript.sh
実行を許可するとしますchmod u+x script.sh
。これにより、次のコマンドが機能します。
$ ./script.sh 0123456789
9876543210
${#input}の値は入力された文字の長さです。
ループは最初から最後まで文字単位で進行します。
各文字を選択するために、スクリプトは「サブストリング拡張」と呼ばれるbashツールを使用します。
引用符man bash
(を入力してアクセスすることもできますman bash
):
${パラメータ:オフセット:長さ}部分
文字列拡張。 offset で指定された文字から引数の最大文字長まで拡張されます。
これはi
、その位置の各文字を順番に選択して変数の文字列を再生成することを意味しますreverse
。
しかし、これを行うためにループやカラフルなコーディングは必要ありません。この単純な行は同じことをします:
$ echo "0123456789" | rev
9876543210
答え2
${#str}
$ str値の長さ。バラよりシェルパラメータ拡張bashのマニュアルから。
for ((i=j-1; i>=0; i--))
bashの算術構文を使用するCに似たforループです。バラよりループ構造マニュアルに
答え3
${#input}
はの文字数です$input
。時には何かを見るときに#
「数字」を考えなければなりません。- 本当に明らかではないか?ループは
for
、最後から最初まで、一度に1文字ずつ繰り返されます。$input
たとえば、isの場合、ループは$input
、、、、、、、unix tm
およびfor
文字 を検索して追加します。m
t
x
i
n
u
reverse
- 最初の行は次のようになります。
#!/bin/bash
You are Missing one です。/
答え4
簡単ですgetopts
。は、文字列を文字ごとに分割し、出力変数からその文字を読み取ることができるAPIを提供するだけです。
input='some string or something' output= OPTIND=1
while getopts : na "-$input"
do output=$OPTARG$output
done; echo "$output"
gnihtemos ro gnirts emos
何も計算したりインデックスを作成したりする必要はありません。getopts
完了後すぐに戻ってもループは終了します。それは簡単です。