コマンドライン引数をファイルに渡す方法

コマンドライン引数をファイルに渡す方法

コマンドライン引数を渡したいテキストファイルがあります。たとえば、

./scriptname.sh abc.sh 

scriptname.shabc.shテキストファイルにコピーするには、どのコマンドを書くことができますかnew.txt

ベストアンサー1

ボンのような殻

Bourneなどのシェル(.sh拡張機能に応じてスクリプトで使用することをお勧めします):

#! /bin/sh -
if [ "$#" -gt 0 ]; then # if I was given at least 1 argument
  cp -- "$1" new.txt # where $1 is the first argument... $9 the 9th
                     # and ${10} the 10th (not $10 which is ${1}0)
else
  echo >&2 Not given enough arguments
  exit 1
fi

--オプションの終わりを表示して、で始まるオプションとして扱われないようにする必要があります$1。)cp-

1つ以上の引数が指定されているかどうかを確認するより短い方法は次のとおりです。

#! /bin/sh -
cp -- "${1?Not given enough arguments}" new.txt

${parameter?message}次のようなエラーでシェルが終了する原因は何ですか?情報このパラメーターが設定されていない場合。

または本当に怠惰な場合:

#! /bin/sh -u
cp -- "$1" new.txt

-uシェルが終了する原因どのパラメーターが設定されていないパラメーター拡張。

コピーみんな議論:

#! /bin/sh -
if [ "$#" -gt 0 ]; then # if I was given at least 1 argument
  cp -- "$@" /some/dir/ # where "$@" expands to all the script's
                        # arguments as separate arguments to cp
else
  echo >&2 Not given enough arguments
  exit 1
fi

${@?...}(移植可能なので、引数なしでスクリプトに依存したり終了したりすることはできません。)-u

パラメータを繰り返すようにfor基本ループを設定する方法は次のとおりです。

#! /bin/sh -
for file do
  cp -- "$file" "$file.new"
done

もちろん、次のようにすることもできます。

#! /bin/sh -
for file in "$@" do
  cp -- "$file" "$file.new"
done

明示的に作成します(ただし、一部のシェルでは効率が悪くなります)。

他の殻

(引数個数確認は別に残してください)

  • csh/tcsh

    cp -- $1:q new.txt # one argument, properly quoted
    cp -- $argv:q /some/dir # all arguments
    
  • rc/ es:

    cp -- $1 new.txt
    cp -- $* /some/dir
    
  • fish

    cp -- $argv[1] new.txt
    cp -- $argv /some/dir
    

おすすめ記事