program arguments
  implicit none
  integer :: i, length, status
  character(:), allocatable :: arg
  intrinsic :: command_argument_count, get_command_argument
  !
  ! コマンドライン引数を全て表示する．
  !
  do i = 0, command_argument_count()
    call get_command_argument(i, length = length, status = status)
    if (status == 0) then
      !
      ! 引数の文字長で "arg" をアロケートする．
      !
      allocate (character(length) :: arg)
      call get_command_argument(i, arg, status = status)
      if (status == 0) then
        !
        ! 取得した引数を表示する．
        !
        if (i == 0) then
          print *, 'Command = "', arg, '"'
        else
          print *, 'Argument', i, '= "', arg, '"'
        end if
      end if
      deallocate (arg)
    end if
    !
    ! エラーの場合はエラーメッセージを表示する．
    !
    if (status /= 0) print *, 'Error', status, 'on argument', i
  end do
end program
