🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

1232閲覧

シェルスクリプト$@と文字列を連結

kousuke24

総合スコア29

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2019/12/27 02:25

シェルスクリプトでコマンドライン引数を$@で展開し、それと文字列を連結したいです。

shell.sh

#文字列aと$@を連結させる echo "a$@"

bash shell.sh i u e o

#実際の実行結果 ai u e o

bash shell.sh i u e o

#実現したい実行結果 ai au ae ao

上記のよな実行結果にするにはどうしたら良いのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

bashということなので

echo ${@/#/a}

でどうでしょうか。

bashのマニュアルの「パラメタ展開」のところで説明されているパターンの置換を使っています。

${parameter/pattern/string}

パターンの置換。 pattern が展開され、 パス名展開の場合と同じようなパターンを作ります。 parameter の展開が行われ、 その値のうち pattern に最長一致する部分が string に置換されます。 pattern が / で始まる場合には、pattern に マッチした部分は全て string に置換されます。 そうでない場合には、最初にマッチした部分だけが置換されます。 pattern が # で始まる場合には、パターンは parameter を展開した値の先頭にマッチしなければなりません。 pattern が % で始まる場合には、パターンは parameter を展開した値の末尾にマッチしなければなりません。 string が空の場合には pattern にマッチした部分は削除されます。 またこの場合には、pattern の後に続く / は省略可能です。 parameter が @ または * である場合、置換操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 parameter が @ または * が添字になっている配列変数である場合、 置換操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。

投稿2019/12/27 02:56

crhg

総合スコア1177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下shの範囲で書いてみました
bashの追加機能を使うともっとすっきりと書けるのかもしれません。

bash

1#! /bin/bash 2 3v='' 4for t in $@ 5do 6 v="${v} a${t}" 7done 8echo ${v}

投稿2019/12/27 02:44

hidezzz

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kousuke24

2019/12/27 02:57

回答ありがとうございます! 試しに v="${v} a${t}" の ${v} を消して実行したところ、 $ bash shell.sh i u e o ao という実行結果になりました。上記の v='' と ${v} はどういった役割を果たしているのかご教授いただけないでしょうか?
hidezzz

2019/12/27 03:14

vは変数で、${v}は変数を展開するときに使用します。 (シェルスクリプトでは変数に代入するときと変数を使用するときで書き方が変わります。) 変数vの右側に文字列(「a${t}」)を連結したものを変数vに代入しています。 ちなみに「${v}」は「$v」と同じものです。変数と普通の文字列との境界を厳密に指定するときに使います。
kousuke24

2019/12/27 03:19

なるほど!! わかりやすい説明ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問