プロが教える店舗&オフィスのセキュリティ対策術

下記のスクリプトで、コマンドライン引数を与えず、標準入力にテキストファイルを指定したらそのテキストファイルが標準出力されますが、"$@"には標準入力になりかわる機能があるのでしょうか?

#!/bin/sh
for line in `cat "$@"`
do
echo $line
done
exit 0

A 回答 (1件)

こんばんわ。



$@は標準入力になりかわる物ではありません。
$@は特殊変数であり、スクリプトに渡された引数全てを値にします。

このスクリプトは、引数に与えられたファイル名の内容を全て表示させます。
表示されるための仕組みは`cat "$@"`です。
catするファイル名が無いため、入力待ちになっているのでは無いかと思います。

試しにコマンドラインで
$ cat -n
を実行してください。-nは行数も表示されるオプションです。
次の行に何か文字を入力してください。
abcde
この文字が次の行に表示されます。
1 abcde


なお、質問者さんは「コマンドライン引数を与えず、
標準入力にテキストファイルを指定したらそのテキストファイルが標準出力されます」
になったようですが、
私が試した環境では何も表示されませんでした。OSやバージョンの違いかな?
    • good
    • 0
この回答へのお礼

ArranMALT様、ありがとうございます。
$ cat -n はおっしゃるとおりになりました。
標準入力にテキストファイルを指定したらそのテキストファイルが1行ずつ標準出力されるのではなく、1ワードが1行に標準出力されました。昨日、質問時には1行毎に出力されると思っていたのですが、改行ではなくスペースが区切りとなっているようです。
とにかく標準入力にテキストファイルを指定したらその内容が標準出力されています。

お礼日時:2018/05/28 22:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!