質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

763閲覧

シェルスクリプトでディレクトリの中身全てを取得したい

ohmoto

総合スコア5

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2022/01/27 12:00

編集2022/01/27 12:17

シェルスクリプトについて質問です。
現在、業務速度UPのためのシェルスクリプトを組んでいます。
コマンド実行時にディレクトリを渡し、ディレクトリ以下の全てのファイル名を変更する。というものです。

問題は、コマンド実行時にディレクトリを渡しても最初のファイルしか返してくれないということです。
複数のファイルを渡すにはどういった方法を取れば良いのでしょうか。
よろしくお願いいたします。

$ ls test/ $ ls test/ banana1.txt banana2.txt banana3.txt $ ./test.sh test/* momo/banana1.txt

test.sh

1for v in $1 2do 3 echo $v 4done

【追記】
引数を二つとり、2つ目の引数がディレクトリでそれ以下のファイル全てを取得したい時の処理を教えてください。
$@では引数1つ目(ファイルに追加したい文字列)も取得してしまうためです。

$ ls test/ $ ls test/ banana1.txt banana2.txt banana3.txt $ ./test.sh <ファイルに追加したい文字列> test/* <ファイルに追加したい文字列> momo/banana1.txt momo/banana2.txt momo/banana3.txt

test.sh

1for v in $@ 2do 3 echo $v 4done

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

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

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

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

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

takasima20

2022/01/27 12:25

ディレクトリを指定といいつつファイル指定してるのなんで?
guest

回答1

0

ベストアンサー

$1は数字の1からわかる通り、「最初の引数」という意味です。「全ての引数」は$@または$*です。

普通は、for v in "$@"と書きます。

#追記
最初の引数と、それ以降の引数で別に扱いたい時は、shiftで最初の引数を$@から取り除きます。

sh

1first="$1" 2shift 3for v in "$@" 4do echo string="$first" file="$v" 5done

投稿2022/01/27 12:04

編集2022/01/27 12:29
otn

総合スコア84695

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

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

ohmoto

2022/01/27 12:08

そうだったんですね。ありがとうございます。 実際に制作予定のスクリプトでは引数を2つ(ディレクトリ・ファイルに追加したい文字列)取るのですが、 そういった場合の、一つ目の引数のファイル全てを取得する方法を教えていただきたいです。
otn

2022/01/27 13:22 編集

もしかすると勘違いがあるかもしれませんが、 ./test.sh <ファイルに追加したい文字列> test/* は、 ./test.sh <ファイルに追加したい文字列> test/banana1.txt test/banana2.txt test/banana3.txt と等価ですが、認識されていますか?つまり、これは引数が4つです。
ohmoto

2022/01/28 02:01

ディレクトリ以下のファイルを渡すという意味になるからファイルを単体で引数に渡しているのと同意義になるのですね。 今回はご提案いただいたshiftで実装をしようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問